我读了很多SO上的文章,但似乎找不到一个好的解决方案。 提出的建议包括将日期转换为字符串多次,将位连接在末尾等等,所有这些都显得有点混乱。
所以问题是:
我们在世界各地拥有服务器。 所有服务器都在其本地时间运行,并保留具有对服务器本地的时间条目的日志。 一些服务器在遵守DST的区域中,而另一些则没有。
假设我从日志中得到这些字符串:2013-01-01 12:34:56, 2013-07-01 12:34:56 ,并且我知道此服务器在纽约,因此它是UTC-5或UTC-4(夏令时)。
我从香港的服务器日志中也得到了相同的字符串,那里没有使用DST,时区为+8。
我需要一段代码块告诉它:
这是表示时间的字符串 这是字符串来自的时区 如适用,应采用夏令时
代码将把字符串解析为DateTimeOffset,其中根据是否与DST相关来调整偏移量。
例如: 纽约服务器日志说“2013-01-01 ...”在1月份DST 不适用,因此解析的日期应该是: 纽约时间下的12:34:56,即UTC下的17:34:56(因为是-5,没有DST)
纽约服务器日志说“2013-07-01 ...” DST 适用于6月份,因此解析的日期应该是: 纽约时间下的12:34:56,即UTC下的16:34:56(因为它是-4,具有DST)
对于HK服务器,这两个日期时间都解析为UTC下的04:34:56。
谢谢大家。
所以问题是:
我们在世界各地拥有服务器。 所有服务器都在其本地时间运行,并保留具有对服务器本地的时间条目的日志。 一些服务器在遵守DST的区域中,而另一些则没有。
假设我从日志中得到这些字符串:2013-01-01 12:34:56, 2013-07-01 12:34:56 ,并且我知道此服务器在纽约,因此它是UTC-5或UTC-4(夏令时)。
我从香港的服务器日志中也得到了相同的字符串,那里没有使用DST,时区为+8。
我需要一段代码块告诉它:
这是表示时间的字符串 这是字符串来自的时区 如适用,应采用夏令时
代码将把字符串解析为DateTimeOffset,其中根据是否与DST相关来调整偏移量。
例如: 纽约服务器日志说“2013-01-01 ...”在1月份DST 不适用,因此解析的日期应该是: 纽约时间下的12:34:56,即UTC下的17:34:56(因为是-5,没有DST)
纽约服务器日志说“2013-07-01 ...” DST 适用于6月份,因此解析的日期应该是: 纽约时间下的12:34:56,即UTC下的16:34:56(因为它是-4,具有DST)
对于HK服务器,这两个日期时间都解析为UTC下的04:34:56。
谢谢大家。
DateTimeZone.AtLeniently
或LocalDateTime.InZoneLeniently
(或者严格版本),它们会为您进行映射。 - Jon Skeet