Как преобразовать дату UTC+0 в дату PST?
У меня есть эта дата UTC+0:
2011-11-28T07:21:41.000Z
и я хотел бы, на C#, преобразовать его в дату PST. Как я могу это сделать? Пробовал с:
object.Data.ToLocalTime()
но я не могу получить правильное значение (которое должно быть 2011-11-27)
редактировать
также попробовал (после внушения на другую тему) это:
DateTime convertedDate = DateTime.SpecifyKind(
DateTime.Parse(object.Data.ToShortDateString()),
DateTimeKind.Utc);
DateTime dt = convertedDate.ToLocalTime();
string dataVideo = dt.ToShortDateString();
но дата все еще 28/11/2011, а не 27/11/2011
2 ответов
Я изменил свои часы, чтобы использовать UTC-08:00 Pacific Time
.
DateTime timestamp = DateTime.Parse("2011-11-28T07:21:41.000Z");
Console.WriteLine("UTC: " + timestamp.ToUniversalTime());
Console.WriteLine("PST: " + timestamp.ToLocalTime());
выход:
UTC: 28/11/2011 7:21:41
PST: 27/11/2011 23:21:41
пример TimeZoneInfo
DateTime timestamp = DateTime.Parse("2011-11-28T07:21:41.000Z");
Console.WriteLine("UTC: " + timestamp.ToUniversalTime());
Console.WriteLine("GMT+1: " + timestamp.ToLocalTime());
Console.WriteLine("PST: " + TimeZoneInfo.ConvertTimeBySystemTimeZoneId(timestamp, "Pacific Standard Time"));
выход:
UTC: 28/11/2011 7:21:41
GMT+1: 28/11/2011 8:21:41
PST: 27/11/2011 23:21:41
Для немного больше цвета
2011-11-28T07:21:41.000Z
это временная метка ISO8601, Z в конце означает UTC. Это представляет определенный момент времени.
DateTime.Parse
вернет вам локальную структуру времени даты, есть три типа видов datetime, UTC, Local и Unspecified.
если вы попытаетесь отобразить это, он покажет вам этот момент в текущем часовом поясе ваших компьютеров (я восточное время, поэтому, когда я печатаю его, я получаю 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 без дополнительной информации. У вас больше нет определенного момента времени, скорее у вас есть неопределенное время..мы знаем, что это то же самое мгновение, что и раньше, только по тихоокеанскому времени, но компьютер больше этого не знает. Имейте это в виду если ты хочешь сохранить это время.