본문 바로가기
프로그래밍/개발일지

UTC 변경 시 시간 처리

by 개발하는군인 2024. 5. 17.
프로그램 내에서 컴퓨터의 시간으로 파일을 작성하거나, 로그를 기록한다.  사용자가 컴퓨터 시간을 수동적으로 변경하거나 UTC를 바꾸면 어떻게 동작 할까?
 

시간 변경

 

이 코드를 실행 하고 컴퓨터 시간을 바꿔보자.

    static void Main()
    {
        while (true)
        {
            Thread.Sleep(1000);
            Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd-HH-mm"));
        }
    }

 

정상적으로 시간이 바뀐 것을 확인 할 수 있다.

 

UTC 변경 

 

코드를 실행 한 상태로 UTC를 사모아(UTC + 13:00) 으로 변경 하였다 

컴퓨터 시간은 변경 되었으나, 프로그램에서 출력되는 값은 변경되지 않았다.

 

이유는 프로그램 시작 후에는 UTC  값이 변경되어도 아무런 동작을 하지않고, 시작 시점의 UTC 값을 가지고 있기 떄문이다.  그럼 프로그램 시작 후  UTC 값을 변경 한 경우에는 어떻게 처리해야 할까?

 

간단하다. UTC 변경 이벤트를 감지하고 TimeZoneInfo의 Cache 값을 Clear하면 정상적으로 변경 된 UTC 값이 적용된다.

 

    static void Main()
    {
        SystemEvents.TimeChanged += new EventHandler(SystemEvents_TimeChanged);

        while (true)
        {
            Thread.Sleep(1000);
            Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd-HH-mm"));
        }
    }

    static void SystemEvents_TimeChanged(object sender, EventArgs e)
    {
        TimeZoneInfo.ClearCachedData();
    }

 

 

 

 

 

'프로그래밍 > 개발일지' 카테고리의 다른 글

Printer 통제 방식(1)  (0) 2024.09.28
ZeroMq (1) C#  (0) 2023.04.20
C# Dynamic  (0) 2023.04.20
C# Anonymous types  (0) 2023.04.19
Winform 최소화 전 사이즈 저장  (0) 2023.04.18