0

string日期时间的表示是"20181230183000000",我无法将其转换为DateTime

DateTimeOffset.ParseExact(DOCDate, "dd.MM.yyyy HH:mm:ss.fff z", CultureInfo.InvariantCulture
4

2 回答 2

4

好吧,实际格式模式应该匹配:您当前的输入

 20181230183000000

方法

 yyyyMMddHHmmssfff

代表year, month, day, hours, minutes, seconds,fractions of second都带有前导零没有任何分隔符

代码:

  string DOCDate = "20181230183000000";

  DateTimeOffset result = DateTimeOffset.ParseExact(
    DOCDate, 
    "yyyyMMddHHmmssfff", 
    CultureInfo.InvariantCulture, 
    DateTimeStyles.AssumeUniversal); // Since you've mentioned 'z' in the question

我们来看一下

 Console.Write(result.ToString(CultureInfo.InvariantCulture));

结果:

  12/30/2018 18:30:00 +00:00

类似的代码DateTime

  DateTime result = DateTime.ParseExact(
    DOCDate, 
    "yyyyMMddHHmmssfff", 
    CultureInfo.InvariantCulture, 
    DateTimeStyles.AssumeUniversal); // Since you've mentioned 'z' in the question

最后,如果您想以某种格式表示 DateTimeOffset( ),请使用方法:DateTimeToString()

  Console.Write(result.ToString("dd.MM.yyyy HH:mm:ss.fff' z'"));
于 2019-12-26T09:35:20.210 回答
1

你可以试试:

var dateTimeString = "20181230183000000";
DateTimeOffset dto;
if (DateTimeOffset.TryParseExact(dateTimeString, "yyyyMMddHHmmssfff", 
                                 CultureInfo.InvariantCulture, 
                                 DateTimeStyles.AssumeUniversal |
                                 DateTimeStyles.AdjustToUniversal, out dto))

{
     Console.WriteLine(dto);
}

这是一篇关于使用 DateTimeOffset、DateTime 而不是 TimeZoneInfo 的好帖子

DateTime.Parse("2012-09-30T23:00:00.0000000Z") 总是转换为 DateTimeKind.Local

于 2019-12-26T09:38:57.090 回答