gpt4 book ai didi

c# - 使用已知但未给定的时区解析 DateTime

转载 作者:太空狗 更新时间:2023-10-29 21:41:25 28 4
gpt4 key购买 nike

我在解析日期和时间时遇到了问题:

我正在尝试解析从德国网站提取的日期时间字符串。它以“day.month.year 24hours:minutes”的格式给出,例如:

01.01.2011 17:00

它始终处于德国时区。但是问题来了:

  • '01.01.2011 17:00' 应该被解析为 DateTime 结构,在 UTC 中包含 '01.01.2011 16:00'(这里,时区是 CET,没有夏令时)
  • 而“01.06.2011 17:00”应解析为 UTC 格式为“01.01.2011 15:00”的 DateTime 结构(此处时区为 CEST,采用夏令时)

我不知道如何实现这一目标。如果我将本地时钟设置为德国时区,并使用 DateTime.ParseExact 和标志 DateTimeStyles.AssumeLocalDateTimeStyles.AdjustToUniversal 进行解析被正确解析。但是,我希望任何客户端独立于他们的本地时钟和时区来解析它。另外,我不想自己做时区偏移,因为它取决于日期(夏季:-2/冬季:-1)。

一旦我有了 UTC 日期时间,就可以很容易地将它转换为任何本地时区。

最佳答案

听起来您知道应该使用哪个时区来解析它。假设 .NET 3.5(因此 TimeZoneInfo)你应该在逻辑上:

  • 将其解析为“本地”时间(非特定时区)
  • 将本地时间转换为 UTC 时间

不幸的是DateTime makes that slightly tricky .编辑:我以为你想使用 DateTimeStyles.AssumeUniversal 转换解析它 - 但最终返回一个 local DateTime,烦人。基本上,您希望以正确的时间结束 a DateTime,以便您可以使用:

parsed = DateTime.SpecifyKind(parsed, DateTimeKind.Unspecified);

然后您可以通过以下方式获取 UTC 值:

DateTime utc = TimeZoneInfo.ConvertTimeToUtc(parsed, germanTimeZone);

请注意,您确实首先需要一个“未指定”的日期时间,以便您可以将其转换为任意时区的 UTC。您还应该记住,由于 DST 更改,本地时间可能会模棱两可(出现两次)或不可能出现(根本不会出现)。

是的,这在 Noda Time 中会容易得多当它完成时:)

关于c# - 使用已知但未给定的时区解析 DateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7246602/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com