프로그램 내에서 컴퓨터의 시간으로 파일을 작성하거나, 로그를 기록한다. 사용자가 컴퓨터 시간을 수동적으로 변경하거나 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 |