【发布时间】:2010-11-18 16:49:05
【问题描述】:
我正在使用 UTC 在数据库中存储数据和时间值。这些值在客户端或每个客户端时区转换为本地时间。我从MSDN article 开始处理这些场景,在夏令时显示UTC 时间似乎会造成问题。
住在东海岸的人 美国输入一个值 比如“2003 年 10 月 26 日 01:10:00 AM”。
1) 在这个特别的早晨,由于 夏令时,凌晨 2:00, 本地时钟重置为凌晨 1:00, 创造一个 25 小时的一天。由于所有 凌晨 1:00 之间的时钟时间值 和 2:00 AM 发生两次 特定的早晨——至少在大多数情况下 美国和加拿大, 电脑真的没办法知道 凌晨 1:10 的意思是——那个 发生在开关之前,或一个 发生在 10 分钟后 夏令时开关。
2) 同样,问题发生在 春天的时候,在特定的 早上,没有2:10这样的时间 是。原因是 2:00 那天 特定的早晨,当地时间 时钟突然变为凌晨 3:00。 整个 2:00 小时从未发生在 这一天 23 小时。
您是如何处理第 1 种情况的,您可能有 4 笔交易,其中两笔在切换之前,两笔在切换之后在夏令时?如何向用户显示交易的时间,因为由于班次,最后两笔交易可能比前两笔交易显示的时间更早。?有时,它可能被证明是不合逻辑的,例如:在邮件链中。
添加:
要添加有关上下文的更多信息,RIA 应用程序(例如 Silverlight/Flash)在客户端上运行(或任何通过 Web 服务与服务器通信的客户端应用程序)允许用户选择交付时间或使用 pc 本地时间安排时间。
如果我可以检查给定的输入时间是否无效,我可能会提醒用户。此外,对于旅行者来说,需要在时间点找到时区,而不是基于用户选择,因为他们可能会在区域之间移动,将他们的时区保存在用户个人资料中也无济于事。
一些用于评估输入时间的 C# 测试示例:
//2:30 am CT to UTC --> 8:30 am
DateTime dt = new DateTime(2009, 03, 08, 2, 30, 00, DateTimeKind.Local);
//8:30 am UTC to CT --> 3:30 am.. which is as expected
DateTime dt1 = new DateTime(2009, 03, 08, 8, 30, 00, DateTimeKind.Utc);
//check for daylight saving time returns false.. ??
TimeZoneInfo.Local.IsDaylightSavingTime(dt);
//check for daylight saving time returns true
TimeZoneInfo.Local.IsInvalidTime(dt);
【问题讨论】:
标签: .net datetime time timezone dst