첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
유용한 소스 코드가 있으면 icodebroker@naver.com으로 보내주시면 감사합니다.
블로그 자료는 자유롭게 사용하세요.

728x90
반응형

▶ SYSTEMTIME.cs

using System;
using System.Runtime.InteropServices;

/// <summary>
/// 시스템 시간
/// </summary>

 

[StructLayout(LayoutKind.Sequential)]

▶ SystemTimeHelper.cs

using System;
using System.Runtime.InteropServices;

/// <summary>
/// 시스템 시간 헬퍼
/// </summary>
public static class SystemTimeHelper
{
    //////////////////////////////////////////////////////////////////////////////////////////////////// Import
    ////////////////////////////////////////////////////////////////////////////////////////// Staitc
    //////////////////////////////////////////////////////////////////////////////// Public

    #region 시스템 시간 설정하기 - SetSystemTime(systemTime)

    /// <summary>
    /// 시스템 시간 설정하기
    /// </summary>
    /// <param name="systemTime">시스템 시간</param>
    /// <returns>처리 결과</returns>
    [DllImport("kernel32.dll", SetLastError = true)]
    public static extern int SetSystemTime(ref SYSTEMTIME systemTime);

    #endregion

    #region 시스템 시간 구하기 - GetSystemTime(systemTime)

    /// <summary>
    /// 시스템 시간 구하기
    /// </summary>
    /// <param name="systemTime">시스템 시간</param>
    /// <returns>처리 결과</returns>
    [DllImport("kernel32.dll", SetLastError = true)]
    public static extern int GetSystemTime(out SYSTEMTIME systemTime);


    #endregion

    //////////////////////////////////////////////////////////////////////////////////////////////////// Method
    ////////////////////////////////////////////////////////////////////////////////////////// Static
    //////////////////////////////////////////////////////////////////////////////// Public

    #region 시스템 시간 설정하기 - SetSystemTime(timeZone, sourceDateTime)

    /// <summary>
    /// 시스템 시간 설정하기
    /// </summary>
    /// <param name="timeZone">시간대</param>
    /// <param name="sourceDateTime">소스 일시</param>
    public static void SetSystemTime(int timeZone, DateTime sourceDateTime)
    {
        DateTime localDateTime;

        if(timeZone > 0)
        {
            localDateTime = sourceDateTime.AddHours(timeZone * -1);
        }
        else
        {
            localDateTime = sourceDateTime.AddHours(timeZone);
        }

        SYSTEMTIME systemTime = new SYSTEMTIME();

        systemTime.Year   = Convert.ToUInt16(localDateTime.Year  );
        systemTime.Month  = Convert.ToUInt16(localDateTime.Month );
        systemTime.Day    = Convert.ToUInt16(localDateTime.Day   );
        systemTime.Hour   = Convert.ToUInt16(localDateTime.Hour  );
        systemTime.Minute = Convert.ToUInt16(localDateTime.Minute);
        systemTime.Second = Convert.ToUInt16(localDateTime.Second);

        SetSystemTime(ref systemTime);
    }

    #endregion

    #region 시스템 시간 설정하기 - SetSystemTime(sourceDateTime)

    /// <summary>
    /// 시스템 시간 설정하기
    /// </summary>
    /// <param name="sourceDateTime">설정 일시</param>
    public static void SetSystemTime(DateTime sourceDateTime)
    {
        SetSystemTime(9, sourceDateTime); // 한국 시간대
    }

    #endregion

    #region 시스템 시간 구하기 - GetSystemTime(timeZone)

    /// <summary>
    /// 시스템 시간 구하기
    /// </summary>
    /// <param name="timeZone">시간대</param>
    /// <returns>시스템 시간</returns>
    public static DateTime GetSystemTime(int timeZone)
    {
        SYSTEMTIME systemTime = new SYSTEMTIME();

        GetSystemTime(out systemTime);

        DateTime localDateTime = new DateTime
        (
            Convert.ToInt32(systemTime.Year),
            Convert.ToInt32(systemTime.Month),
            Convert.ToInt32(systemTime.Day),
            Convert.ToInt32(systemTime.Hour),
            Convert.ToInt32(systemTime.Minute),
            Convert.ToInt32(systemTime.Second),
            Convert.ToInt32(systemTime.Millisecond)
        );

        if(timeZone > 0)
        {
            return localDateTime.AddHours(timeZone);
        }
        else
        {
            return localDateTime.AddHours(timeZone * -1);
        }
    }

    #endregion

    #region 시스템 시간 구하기 - GetSystemTime()

    /// <summary>
    /// 시스템 시간 구하기
    /// </summary>
    /// <returns>시스템 시간</returns>
    public static DateTime GetSystemTime()
    {
        return GetSystemTime(9);
    }

    #endregion
}

 

728x90
반응형
Posted by 사용자 icodebroker
TAG , ,

댓글을 달아 주세요