将字符串转换为UTC日期时间

本文关键字:日期 时间 UTC 字符串 转换 | 更新日期: 2023-09-27 18:05:54

我有这个字符串"Sun Aug 02 2015 00:15:47 GMT+0000 (UTC)"

我创建了这么多的日期时间格式" add MMM dd yyyy HH:mm:ss"

现在我不知道该如何处理datetime字符串的结束部分。我不确定我所拥有的字符串是否为UTC的标准格式,可以很容易地转换,或者如果它是自定义格式。

尽管如此,我还是想把字符串datetime转换成一个datetime对象。

将字符串转换为UTC日期时间

string str = "Sun Aug 02 2015 00:15:47 GMT+0000 (UTC)";
var dt = DateTime.ParseExact(str, "ddd MMM dd yyyy HH:mm:ss '"GMT'"zzzz '"(UTC)'"", CultureInfo.InvariantCulture);

我会考虑以下两种方法之一:

string str = "Sun Aug 02 2015 00:15:47 GMT+00:00 (UTC)";
str = str.Substring(0, str.IndexOf('(') - 1);
DateTime dt = DateTime.ParseExact(str, "ddd MMM dd yyyy HH:mm:ss 'GMT'K",
    CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal);

string str = "Sun Aug 02 2015 00:15:47 GMT+00:00 (UTC)";
str = str.Substring(0, str.IndexOf('(') - 1);
DateTimeOffset dto = DateTimeOffset.ParseExact(str, "ddd MMM dd yyyy HH:mm:ss 'GMT'K",
    CultureInfo.InvariantCulture);

在这两个例子中,我们都假设括号中的部分是不相关的。如果您的输入可能因时区而异,这一点可能很重要。

在第一个示例中,我们假设您希望输出始终是基于UTC的DateTime。输入偏移量可以变化,但输出将始终调整为协调世界时,并将具有DateTimKind.Utc

在第二个示例中,我们假设您希望输出与输入中提供的内容完全匹配。为此,输出需要为DateTimeOffset类型。否则,您将无法跟踪与UTC或您自己的本地时区不完全匹配的偏移量。

我更喜欢第二种选择。如果您需要DateTime,您总是可以通过调用DateTimeOffset.DateTime.UtcDateTime.LocalDateTime属性来获得一个。