位置和日期时间的策略以计算处理DST的时区

问题描述

好的,我有一个问题,我希望用户界面输入地球上任意位置的日期/时间。基本上,我可以在系统中放入某种位置信息,以允许我计算该“地点”的时区。我希望我的UI显示在该位置的相关时区设置中为指定日期输入的日期时间

是否存在.NET API,用于计算指定日期时间的某个位置的时区?我不希望当前时区。我想要一个指定的DateTime 的时区。

例如今天在澳大利亚悉尼的澳大利亚AEDST,格林尼治标准时间+ 11GMT。 3个月前是AEST,即+ 10GMT。如果有人输入日期时间为15/07/2020 09:00:00,我希望控件显示确切的DateTime,但我将存储15/07/2020 09:00:00 + 10:00。我如何确定悉尼当时的时区?

编辑:解决方案需要离线

解决方法

解决方案工作流程:

  1. 根据资源存储IANA tz名称,例如“澳大利亚/悉尼”

  2. 具有日期控件,可以针对该资源指定交易记录(例如,使用标准的DateTime控件)。为了论证,假设指定了13/12/2020(dd / MM / yyyy)。这将是AEDST中的+ 11GMT。需要脱机计算如何从“ 13/12/2020” +“澳大利亚/悉尼” =>如何在DateTimeOffset字段中存储“ 2020-12-13T00:00:00 + 11:00”。

使用

TimeZoneInfo tzi = TZConvert.GetTimeZoneInfo("Australia/Sydney");

获取时区信息。

然后为任意日期计算偏移量

TimeSpan offsetTest = tzi.GetUtcOffset(new DateTime(2020,7,1));

设计的最终组成部分将是DST转换的时间不明确。我可能会选择GetUtcOffset的任意有效结果,然后进行编辑,如果仍然有歧义,则保留先前的偏移量。