我有一个包含日期/时间字符串的日志文件,格式如下:
2019/10/01 15:30
正如您所看到的,这些字符串不包含任何时区信息。但是,我知道时间所代表的时区。
如果我在我的个人电脑上使用此C#代码,该电脑已正确设置本地时区,则时间将按预期解析。我期望将本地时间转换为UTC以插入数据库中。
Time.ParseExact("2019/10/01 15:30", "yyyy/MM/dd HH:mm", provider, DateTimeStyles.AdjustToUniversal & DateTimeStyles.AssumeLocal);
然而,如果我在其中一个将时区设置为UTC的Docker主机上运行此代码,则时间将解析为UTC。这是有意义的,因为在使用UTC的Docker主机上,
AssumeLocal
将与UTC相同。仅应用手动偏移量是不够的,因为由于夏令时的原因。而且,其中一些日志是历史性的,可以追溯到夏令时更改之前,因此即使使用算法也会很复杂,似乎应该已经解决了这个问题(即根据日期和时区确定是否处于夏令时状态,然后相应地调整为UTC)。
我想要能够显式指定时间戳的时区,并让框架同时使用给定的时区和实际日期来正确转换时间为UTC。我查看了这个问题和这个问题,但它们都似乎依赖于系统本身被设置为您希望假定日期所在的时区。
第二个问题似乎开始解决假定已知时区的问题,但是响应仅使用已解析时间的
GetUtcOffset
来确定偏移时间的数量。这假设时间已经在所需时区中解析。
provider
设置为什么?另外,我猜你是指DateTime.ParseExact
? - JuanR