我正在解析一个HL7 TimeStamp字段,格式是......
YYYYMMDD [HHMM [SS [.SSSS]]] [+ / -ZZZZ]
...意味着偏移是可选的。如果未提供偏移量,则需要假设日期/时间值是发送数据的系统的本地值,这可能与消耗系统解析数据的时区不同。如果提供了偏移量,则应将其作为时间戳的一部分保留。
所以我要么使用DateTime.ParseExact或DateTimeOffset.ParseExact,但两种数据类型似乎都不适合两种用例,因为如果提供时区偏移,则DateTime不会捕获它,但如果没有提供,则DateTimeOffset可以假设我的本地oofset,而不是源或者不是正确的通用。
我想我需要某种方法在同一数据类型中有一个偏移或没有偏移。有什么建议吗?
答案 0 :(得分:0)
如果时区存在于字符串中,则DateTime.TryParseExact将考虑时区:
从文档(https://msdn.microsoft.com/en-us/library/ms131044(v=vs.110).aspx):
如果s包含时区信息,则必要时将时间转换为本地时间,并将返回的DateTime对象的Kind属性设置为DateTimeKind.Local。
但我认为真正的问题是何时没有提供时区。然后,消费者无法知道发件人的时区,因此无法默认为该值。