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

3

如何将日期时间字符串转换为GMT的UTC时间格式。

var x = "02/01/2017 10:00";
var z = DateTime.ParseExact(x, "ddd, dd MMM yyyy HH:mm:ss 'GMT'", CultureInfo.InvariantCulture);

1
不清楚你的问题。请指明你期望的输出。 - NineBerry
3个回答

9

事实上,您尝试的方法是错误的。您可以先获取等同于给定日期的DateTime值,然后将它们转换为UTC时间。可以尝试以下操作:

string inputDateStr = "02/01/2017 10:00";
DateTime inputDate;
if (DateTime.TryParseExact(inputDateStr, "MM/dd/yyyy HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.None, out inputDate))
{
    Console.WriteLine("Date time Now  : {0} ", inputDate);
    Console.WriteLine("Date time UTC  : {0} ", inputDate.ToUniversalTime().ToString("ddd, dd MMM yyyy HH:mm:ss 'GMT'"));                
}

示例代码

以上为示例代码链接。

嗨,谢谢提供工作示例。我该如何将inputDate转换为datetime而不是字符串? - user3399326
如果输入是 DateTime 类型,则仅使用 inputDate.ToUniversalTime().ToString("ddd, dd MMM yyyy HH:mm:ss 'GMT'"),无需进行转换。 - sujith karivelil
我需要以日期时间格式的inputDateTime。因此,我使用了inputDate.ToUniversalTime().ToString("ddd, dd MMM yyyy HH:mm:ss 'GMT'").ToDateTime()来转换为日期时间。 - user3399326

3
"我不完全清楚你在问什么... UTC并不是一个格式,而是一个时区,相当于GMT(实际上这并不严格正确,但对于这个问题来说应该没问题。"
"你的字符串代表的是哪个时间点?是UTC时间吗?还是莫斯科当地时间?你需要知道答案,因为它们是完全不同的时间。"
"如果该字符串代表UTC时间,则可以执行以下操作:"
"//首先将其解析为DateTime对象。请注意,格式字符串与您拥有的字符串相对应-在您的代码中,它们完全不同。"
var dateTimeWithUnspecifiedKind = DateTime.ParseExact(x, "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture);

所以你有一个日期时间对象。它有一个"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 time——.NET的另一组日期和时间类的替代品。

请使用“{}”按钮格式化代码部分,以使您的帖子更易读。 - codeforester
抱歉 - 这是我的第一篇帖子 - 下次我会在阅读格式方面做得更好! - Gareth Erskine-Jones

1
我不确定你想要做什么。但是,“Universal Time”、“Zulu time”和“UTC”实际上是“格林威治标准时间(GMT)”的现代名称。因此,两个时间将是相同的。您可以使用DateTime.ToUniversalTime()DateTime.UtcNow方法获取UTC时间。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接