关于c#:如何将UTC + 0日期转换为PST日期?

How to convert UTC+0 Date to PST Date?

我有这个UTC+0日期:

1
2011-11-28T07:21:41.000Z

我想在C上把它转换成一个PST日期。我该怎么做?尝试:

1
object.Data.ToLocalTime()

但是我不能得到正确的值(应该是2011-11-27)

编辑

在对另一个主题提出建议后,还尝试了以下方法:

1
2
3
4
5
6
DateTime convertedDate = DateTime.SpecifyKind(
    DateTime.Parse(object.Data.ToShortDateString()),
    DateTimeKind.Utc);                    

DateTime dt = convertedDate.ToLocalTime();
string dataVideo = dt.ToShortDateString();

但日期仍然是2011年11月28日,而不是2011年11月27日


我把钟改成用UTC-08:00 Pacific Time

1
2
3
DateTime timestamp = DateTime.Parse("2011-11-28T07:21:41.000Z");
Console.WriteLine("UTC:" + timestamp.ToUniversalTime());
Console.WriteLine("PST:" + timestamp.ToLocalTime());

输出:

1
2
UTC: 28/11/2011 7:21:41
PST: 27/11/2011 23:21:41

TimeZoneInfo示例

1
2
3
4
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"));

输出:

1
2
3
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将返回一个本地日期时间结构,它有三种日期时间类型: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

请注意,此返回日期时间的Kind属性现在是Unspecified,这意味着您将无法在没有更多信息的情况下将其传输回UTC。你在时间上不再有一个特定的瞬间,而是有一个不确定的时间……我们知道这和以前太平洋时间的瞬间是一样的,但是计算机不再知道这一点。如果你想这次存储,请记住这一点。