如何将UTC+0 Date转换为PST Date

本文关键字:Date 转换 PST UTC+0 | 更新日期: 2023-09-27 18:17:11

我有这个UTC+0日期:

2011-11-28T07:21:41.000Z

,我想,在c#中,将其转换为PST日期。我该怎么做呢?try with:

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

如何将UTC+0 Date转换为PST Date

我已经改变我的时钟使用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将返回给您一个本地日期时间结构,有三种类型的日期时间类型,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

请注意,虽然时间的打印方式不同,但这两个日期时间都指的是同一时刻。

要在不同的时区显示此瞬间,我认为最简单的方法是TimeZoneInfo类(尽管我不确定它是否100%准确)。

TimeZoneInfo.ConverTimeBySystemTimeZoneId(dateTime, "Pacific Standard Time").

现在打印它将产生您想要的结果11/27/2011 11:21:41 PM

注意,这个返回DateTime的Kind属性现在是Unspecified,这意味着如果没有更多的信息,你将无法将其传输回UTC。你不再有一个特定的时间,而是一个不确定的时间,我们知道它和以前在太平洋时间里的时间是相同的,但计算机不再知道。如果您想存储这段时间,请记住这一点。