如何在GMT中将datetime字符串转换为utc时间格式。
var x = "02/01/2017 10:00";
var z = DateTime.ParseExact(x, "ddd, dd MMM yyyy HH:mm:ss 'GMT'", CultureInfo.InvariantCulture);
答案 0 :(得分:4)
答案 1 :(得分:1)
我不确定你想做什么。但是,世界时间, Zulu时间和 UTC 实际上是格林威治标准时间(GMT)的现代名称。所以两次都是一样的。您可以使用DateTime.ToUniversalTime()
或DateTime.UtcNow
方法获取UTC时间。
答案 2 :(得分:0)
目前还不完全清楚你问的是什么...... UTC不是一种格式,它是一个时区,相当于格林尼治标准时间(嗯,实际上这并不严格,但对于这个问题的目的,它应该没问题。
你的字符串代表什么时间点?是UTC吗?或者是莫斯科当地时间?你需要得到答案,因为它们完全不同。
如果字符串代表UTC时间,那么你可以这样做:
//首先将其解析为DateTime对象。请注意,格式字符串与您拥有的字符串相对应 - 在您的代码中,它们完全不同。
var dateTimeWithUnspecifiedKind = DateTime.ParseExact(x, "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture);
所以你如何拥有一个日期时间对象。它具有Unspecified的“Kind”属性。所以它没有存储任何信息来指定它应该是UTC,而不是莫斯科或纽约时间。
//所以我们这样做......
var dateTimeAsUtc = DateTime.SpecifyKind(dateTimeWithUnspecifiedKind, DateTimeKind.Utc);
这意味着,“保持数字相同,但请记下日期时间将被解释为UTC日期时间”。
然后,如果您想将其转换回字符串,您可以执行以下操作:
var s = dateTimeAsUtc.ToString("O");
这会给你一个很好的代表:
2017-01-02T10:00:00.0000000Z
您很幸运,您对UTC感兴趣。 datetime类只能执行UTC,“本地”(无论是什么),还是“未指定”。对于这类事情来说,它并不是非常有用。 DateTimeOffset稍微好一点 - 它基本上是一个DateTime,但它也存储了UTC与当时生效的偏移量之间的差异。
这可能就是你所需要的。如果您需要真正了解这些内容,请查看Noda时间 - .NET的另一组日期和时间类。