2

如何将 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

4

4 回答 4

4

我猜你在美国东部时间。它从时间中减去 5 小时。也许这是因为您如何打印时间?尝试在 GMT 中打印。或者你可以用你当地的时区来解析它。

于 2011-06-03T18:59:14.187 回答
3

你如何显示价值?我怀疑它只是将您的本地时区应用于日期。

例如,尝试打印:

  • date.Year
  • date.Kind
  • date.Hour

我的猜测是,您会看到date实际上DateTime具有正确值的 UTC 。

不幸的是 .NET 正在为您隐式执行时区转换,但是 .NET 中的日期和时间类型无论如何都会留下一些不足之处:(

另一种方法是使用DateTimeOffset它应该使它稍微清晰一些。

于 2011-06-03T18:59:41.017 回答
0

您可以使用此代码

        DateTime a;
        var dt = DateTime.TryParse("30/05/1970",out a);
于 2013-09-05T08:23:46.740 回答
0

默认情况下,给定的时间会调整为您机器的本地时区。date.Kind应该反映这一点。如果您希望将时间调整为世界时 (UTC),请使用DateTimeStyles.AdjustToUniversalflag 作为ParseExact.

于 2013-09-05T08:32:03.403 回答