Еще немного цвета
2011-11-28T07:21:41.000Z
Это метка времени ISO8601, Z в конце обозначает UTC. Это представляет конкретный случай во времени.
DateTime.Parse
вернет вам локальную структуру даты и времени, есть три типа даты и времени: UTC, Локальный и Не указано.
Если вы попытаетесь отобразить это, он покажет вам этот момент в текущем часовом поясе вашего компьютера (я восточное время, поэтому, когда я его распечатываю, я получаю 11/28/2011 2:21:41 AM
).
Если я хочу переключить этот DateTime Kind
на UTC, я мог бы сделать что-то вроде
DateTime.Parse("2011-11-28T07:21:41.000Z").ToUniversalTime()
Распечатав это сейчас (так как это сейчас UTC) я получаю 11/28/2011 7:21:41 AM
.
Обратите внимание, что, хотя время печатается по-разному, оба эти значения даты относятся к одному и тому же моменту времени.
Чтобы отобразить этот момент в другом часовом поясе, самый простой способ imo - это класс TimeZoneInfo (хотя я не уверен, что он на 100% точен).
TimeZoneInfo.ConverTimeBySystemTimeZoneId(dateTime, "Pacific Standard Time").
Печать сейчас даст желаемый результат 11/27/2011 11:21:41 PM
Обратите внимание, что это возвращаемое свойство DateTime Kind
теперь Unspecified
, что означает, что вы не сможете перенести его обратно в UTC без дополнительной информации. У вас больше нет определенного момента времени, скорее, у вас есть неопределенное время ... мы знаем, что это тот же момент времени, что и раньше, в тихое время, но компьютер больше не знает этого. Имейте это в виду, если вы хотите сохранить это время.