C#在DateTime.ParseExact中手动指定时区

问题描述 投票:3回答:1

我有一个日志文件,其中包含日期/时间字符串的格式如下:

2019/10/01 15:30

如您所见,字符串不包含任何时区信息。但是,我确实知道表示时间的时区。

如果我在自己的PC上使用了此C#代码,并正确设置了其本地时区,则会按预期方式解析时间。我期望将本地时间转换为UTC以便插入数据库。

Time.ParseExact("2019/10/01 15:30", "yyyy/MM/dd HH:mm", provider, DateTimeStyles.AdjustToUniversal & DateTimeStyles.AssumeLocal);

但是,如果我在其中一个时区设置为UTC的Docker主机上运行此代码,则时间将解析为UTC。这是有道理的,因为在使用UTC AssumeLocal的Docker主机上将与UTC相同。

由于夏令时,仅应用手动偏移量是不够的。另外,其中一些日志是历史日志,可以追溯到DST更改之前,因此即使使用算法也很复杂,而且似乎已经应该解决(即给定日期和时区,确定它是否在DST中)是否,然后相应地调整为UTC)

我想做的是为时间戳明确指定timezone,并让框架使用给定的时区和实际日期将时间正确地转换为UTC。我看过this questionthis question,但它们似乎都取决于系统本身是否设置为您要假定日期所在的时区。

[第二个问题似乎确实开始解决了假设时区已知的问题,但是随后响应仅在解析的时间上使用GetUtcOffset来确定抵消时间的时间量。假设已经在所需的时区中解析了时间。

我有一个日志文件,其中包含日期/时间字符串的格式如下:2019/10/01 15:30如您所见,字符串不包含任何时区信息。但是,我确实知道......>

c# datetime timezone date-conversion
1个回答
1
投票

我相信您正在寻找的是TimeZoneInfo

使用TimeZoneInfo,您可以从TimeZoneInfo.FindSystemTimeZoneById获取所需的信息。

© www.soinside.com 2019 - 2024. All rights reserved.