提问者:小点点

DateTimeOffset ParseExact


我必须用日期解析csv(我知道那些日期是utc)。

 20200102 07:00:12:342

在我的方法中,我像这样解析它们。

   DateTimeOffset utcTime1 = DateTimeOffset.ParseExact(csv[0].Trim(), "yyyyMMdd  HH:mm:ss:fff", CultureInfo.InvariantCulture,  DateTimeStyles.AllowWhiteSpaces);

但是结果不是utc而是我的线程时间。

1/2/2020 7:11:43 AM +01:00
1/2/2020 7:11:45 AM +01:00
1/2/2020 7:11:46 AM +01:00
1/2/2020 7:11:46 AM +01:00
1/2/2020 7:11:47 AM +01:00

所以我试了一下:

 DateTimeOffset utcTime1 = DateTimeOffset.ParseExact(csv[0].Trim(), "yyyyMMdd  HH:mm:ss:zzz", CultureInfo.InvariantCulture,  DateTimeStyles.AssumeUniversal);

但它会抛出一个错误无效日期时间?


共2个答案

匿名用户

您在第二个字符串(zzz,与UTC偏移量)中提供了毫秒的错误格式字符串。 文档:

“FFF”日期和时间值中的毫秒。

DateTimeOffset.ParseExact("20200102 07:00:12:342", "yyyyMMdd HH:mm:ss:fff", CultureInfo.InvariantCulture,  DateTimeStyles.AssumeUniversal)

解析到我的计算机上的02-jan-20 7:00:12AM+00:00

匿名用户

问题出在第二个输入格式“yyyymmmdd hh:mm:ss:zzz”中提到的输入格式

zzz代表与协调世界时的时差和分钟差。

但实际上这里的值是毫秒,应该由fff指定。

所以正确的格式应该是“yyyymmmdd hh:mm:ss:fff”

    DateTimeOffset utcTime1 = DateTimeOffset.ParseExact("20200102 07:00:12:342", "yyyyMMdd HH:mm:ss:fff", CultureInfo.InvariantCulture,  DateTimeStyles.AssumeUniversal);
    Console.WriteLine(utcTime1);

这给了我

1/2/2020 7:00:12 AM+00:00