c# - 处理不明确的时间与夏令时
问题描述
我正在使用 Visual Studio 2019 处理 ASP.Net 项目,在其中一个表单中有一个字段可以从用户那里获取日期时间,我将该数据发送到另一种方法“ConvertDateTime”,该方法将日期和时间转换为东部时间并将其保存到数据库中,检索东部时间时转换回用户时区。在夏令时如何使用下面提到的方法处理模糊时间。
public static DateTime ConvertDateTime(DateTime time, IPTimeZoneInfo tzInfo)
{
if (!tzInfo.Initialized)
{
throw new HttpException("Timezone info structure not initialized.");
}
if (!String.IsNullOrEmpty(tzInfo.WinID)) // New adjustment using Dynamic DST
{
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById(tzInfo.WinID);
if (!tzInfo.AutoAdjustDst && tzi.SupportsDaylightSavingTime && tzi.IsDaylightSavingTime(time))
time = time.AddHours(1.0);
// In case the time is invalid in the course time zone, increment until the next valid minute
while (tzi.IsInvalidTime(time))
time = time.AddMinutes(1);
time = DateTime.SpecifyKind(time, DateTimeKind.Unspecified);
return TimeZoneInfo.ConvertTime(time, tzi, ServerTimeZoneInfo);
}
double hourOff = tzInfo.HourOffset;
if (!tzInfo.AutoAdjustDst && time.IsDaylightSavingTime())
{
hourOff -= 1.0;
}
if (time.Year < 100)
{
time = time.AddYears(time.Year < 70 ? 2000 : 1900);
}
return time.AddHours(-hourOff);
}
解决方案
无论服务器时区如何,我都建议服务器端时间处理为 UTC。它实际上应该只为最终用户和显示进行转换。这也意味着如果你的服务器被移动到不同的时区,这在现在的云服务器中很常见,那么你的项目仍然可以正常工作。
.NET 时间处理例程都基于 UTC,如果您使用库方法 ConvertTimeToUTC 和 ConvertTimeFromUTC,则生成的时间将自动处理本地时区夏令时。
推荐阅读
- powerbi - 基于图例的自定义格式视觉效果
- azure - 如何从 html 调用 azure 函数?
- python - Python - 构建依赖关系图并解析结果以发挥作用
- javascript - 是否可以将 html 复制到剪贴板以获取隐藏元素?
- usb - 通过 USB 验证 ADC 数据
- reporting-services - SSRS 重载解析失败,因为没有可访问的“IIf”接受此数量的参数
- arrays - (Mongodb) 使用 $map 聚合函数时出现错误 (BadValue) $in 需要一个数组
- mysql - 如何将阿姆哈拉语数据从mysql数据库导入?
- php - 无法将 PHP 值转换为日期类型。预期以下类型之一:null、DateTime
- python - 我们如何从另一个目录导入模块