繁体   English   中英

将datetime字符串转换为Utc

[英]convert datetime string to Utc

如何在格林尼治标准时间将datetime字符串转换为utc时间格式。

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

实际上,您尝试过的事情是错误的,您可以做的是,获取等于给定日期的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'"));                
}

工作实例

我不确定您想做什么。 但是, 通用时间祖鲁时间UTC实际上是格林威治标准时间(GMT)的现代名称。 因此,这两个时间将是相同的。 您可以使用DateTime.ToUniversalTime()DateTime.UtcNow方法获取UTC时间。

目前还不清楚您要问的是什么... UTC不是一种格式,它是一个时区,相当于格林尼治标准时间(嗯,实际上这并不是严格意义上的,但是出于这个问题的目的,应该没问题。

您的字符串代表什么时间? 是UTC吗? 还是莫斯科当地时间? 您需要得到答案,因为它们是完全不同的时间。

如果字符串表示UTC时间,则可以执行以下操作:

//首先将其解析为DateTime对象。 请注意,格式字符串与您拥有的字符串相对应-在您的代码中,它们完全不同。

var dateTimeWithUnspecifiedKind = DateTime.ParseExact(x, "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture);

那么你如何拥有一个datetime对象。 它具有“未指定”的“种类”属性。 因此,它不会存储任何信息来指定它应该是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的另一组日期和时间类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM