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

시스템 시간 설정하기

------------------------------------------------------------------------------------------------------------------------

SYSTEMTIME.cs

 

 

using System;

using System.Runtime.InteropServices;

 

/// <summary>

/// 시스템 시간

/// </summary>

[StructLayout(LayoutKind.Sequential)]

public struct SYSTEMTIME

{

    //////////////////////////////////////////////////////////////////////////////////////////////////// Field

    ////////////////////////////////////////////////////////////////////////////////////////// Public

 

    #region Field

 

    /// <summary>

    /// 연도

    /// </summary>

    public ushort Year;

 

    /// <summary>

    ///

    /// </summary>

    public ushort Month;

 

    /// <summary>

    /// 요일

    /// </summary>

    public ushort DayOfWeek;

 

    /// <summary>

    ///

    /// </summary>

    public ushort Day;

 

    /// <summary>

    ///

    /// </summary>

    public ushort Hour;

 

    /// <summary>

    ///

    /// </summary>

    public ushort Minute;

 

    /// <summary>

    ///

    /// </summary>

    public ushort Second;

 

    /// <summary>

    /// 밀리초

    /// </summary>

    public ushort Millisecond;

 

    #endregion

}

 

 

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

}

 

------------------------------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker
TAG , ,

댓글을 달아 주세요