C# 解析日期时间

C# 解析日期时间,c#,datetime,iformatprovider,C#,Datetime,Iformatprovider,如何将1900-01-01 00:00:00Z解析为DateTime对象 string temp = "1900-01-01 00:00:00Z"; CultureInfo provider = CultureInfo.InvariantCulture; var date = DateTime.ParseExact(temp, "yyyy-MM-dd hh:mm:ssZ", provider); 这让我想起: 1899年12月31日下午7:00:

如何将1900-01-01 00:00:00Z解析为DateTime对象

        string temp = "1900-01-01 00:00:00Z";
        CultureInfo provider = CultureInfo.InvariantCulture;
        var date = DateTime.ParseExact(temp, "yyyy-MM-dd hh:mm:ssZ", provider);
这让我想起:


1899年12月31日下午7:00:00

我猜你在东部时间。它是从时间中减去5小时。也许这是因为你打印时间的方式?试着用格林尼治标准时间打印它。或者你可以用你的本地时区来解析它。

你是如何显示这个值的?我怀疑这只是把你当地的时区应用到日期上

例如,尝试打印:

  • date.Year
  • date.Kind
  • date.Hour
我的猜测是,您将看到
date
实际上是一个UTC
DateTime
,具有正确的值

不幸的是,.NET正在隐式地为您执行时区转换,但是,.NET中的日期和时间类型仍然存在一些问题:(

另一种方法是使用
DateTimeOffset
,这会使它稍微清晰一些。

您可以使用此代码

        DateTime a;
        var dt = DateTime.TryParse("30/05/1970",out a);

默认情况下,给定的时间将调整为您机器的本地时区。
date.Kind
应反映这一点。如果您希望将时间调整为世界时(UTC),使用flag作为第四个参数,以
ParseExact

时间精确地缩短了5个小时。您可能需要考虑时区。您需要为屏幕截图设置帧