티스토리 뷰

DateTime을 단순한 구조체로만 생각하고 썼는데, 서버에서 사용하다보니 이슈를 발견했다. local 시간을 저장하고 싶어 이를 serialize화하여 보냈는데, 서버에 UTC값으로 저장되었다. 처음에는 Json.NET의 버그인가 싶어 찾아보다가, DateTime의 특성을 실험해봤다.

> DateTime.Parse("2018-10-19T19:00:00.1480253+09:00");
[10/19/2018 7:00:00 PM]
> DateTime.Parse("2018-10-19T19:00:00.1480253+00:00");
[10/20/2018 4:00:00 AM]

> DateTime.Parse("Thu, 25 Oct 2018 06:45:44 GMT");
[10/25/2018 3:45:44 PM]
> DateTimeOffset.Parse("Thu, 25 Oct 2018 06:45:44 GMT");
[10/25/2018 6:45:44 AM +00:00]

UTC 텍스트를 변환할 때, 바로 그대로 그 시간대로 변환하는게 아니라, 해당 환경에 맞게끔 시간을 변경한다. UTC 텍스트 값을 DateTime으로 변환했더니, 자기가 알아서 한국 시간에 맞쳐 +9시간을 더해버렸다. DateTimeOffset 변환과 비교해보면 좋다.

UTC로만 활용할 경우는 상관없는데, 특수한 이유로 Local 시간을 활용해야할 경우, DateTimeOffset을 활용하는게 더 다루기 좋겠다는 결론이다.