解析可能有也可能没有偏移的日期时间字符串

时间:2018-02-03 00:02:07

标签: c# .net datetime datetimeoffset

我正在解析一个HL7 TimeStamp字段,格式是......

  

YYYYMMDD [HHMM [SS [.SSSS]]] [+ / -ZZZZ]

...意味着偏移是可选的。如果未提供偏移量,则需要假设日期/时间值是发送数据的系统的本地值,这可能与消耗系统解析数据的时区不同。如果提供了偏移量,则应将其作为时间戳的一部分保留。

所以我要么使用DateTime.ParseExact或DateTimeOffset.ParseExact,但两种数据类型似乎都不适合两种用例,因为如果提供时区偏移,则DateTime不会捕获它,但如果没有提供,则DateTimeOffset可以假设我的本地oofset,而不是源或者不是正确的通用。

我想我需要某种方法在同一数据类型中有一个偏移或没有偏移。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

如果时区存在于字符串中,则DateTime.TryParseExact将考虑时区:

从文档(https://msdn.microsoft.com/en-us/library/ms131044(v=vs.110).aspx):

  

如果s包含时区信息,则必要时将时间转换为本地时间,并将返回的DateTime对象的Kind属性设置为DateTimeKind.Local。

但我认为真正的问题是何时没有提供时区。然后,消费者无法知道发件人的时区,因此无法默认为该值。