将datetime字符串转换为Utc

时间:2017-02-02 01:36:36

标签: c# asp.net datetime

如何在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);

3 个答案:

答案 0 :(得分:4)

实际上您尝试的是错误的,您可以做的是,将DateTime值等效于给定日期,然后将它们转换为UTC时间,尝试类似以下内容:

{{1}}

Working Example

答案 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的另一组日期和时间类。