VB2012, скомпилированный с .NET4.5: Последние пару дней это не давало мне покоя. У меня есть данные json, которые я анализирую с помощью класса JavaScriptSerializer.Deserialize. Одно из полей представлено следующим образом:
depart 2017-09-22T00:45:00-07:00
Какое местное время отправления (это в Лос-Анджелесе).
В моем классе-оболочке я написал
Public Class JsonLeg
Public depart As DateTime
Public blah...many more fields
End Class
Я принимаю данные json и использую JavaScriptSerializer.Deserialize для их анализа. После этого я отлаживаю вывод, и он выглядит так
depart [Kind=Local] 2017-09-22T02:45:00
depart.ToLocalTime [Kind=Local] 2017-09-22T02:45:00
depart.ToUniversalTime [Kind=Utc ] 2017-09-22T07:45:00
Все выглядит хорошо, но ToLocalTime просто преобразует его в часовой пояс моего компьютера, который находится в Далласе. Что мне нужно, так это местное время в Лос-Анджелесе 2017-09-22T00:45:00 для сравнения со списком дат, у которых нет вида. Как мне вытащить местное время исходного местоположения, а не местное время моего компьютера?
Я протестировал использование DateTimeOffset в качестве переменной, но боюсь, что не понимаю, что делает десериализатор, когда он анализирует данные json.
Отладка для этого выглядит так:
depart.DateTime [Kind=Unspecified] 2017-09-22T00:45:00
depart.LocalDateTime [Kind=Local ] 2017-09-22T02:45:00
depart.UtcDateTime [Kind=Utc ] 2017-09-22T07:45:00
В этом случае DateTimeOffset.DateTime дает мне то, что мне нужно. Но почему? Я пытаюсь понять, в чем различия и как каждый из них анализируется десериализатором.