【发布时间】:2013-09-01 22:57:51
【问题描述】:
我有一个对象,其属性当前为 DateTime。
对象在时间范围内被标记为有效。默认为 00:00:00 到 23:59:59
用户在 UI 中输入值并通过以下方式设置属性:
new DateTime(DateTime.Now.Year,
DateTime.Now.Month,
DateTime.Now.Day,
model.Hours,
model.Minutes,
model.Seconds)
然后在到达数据库时将其转换为 UTC。
今天的日期是 2013 年 8 月 29 日。如果印度的一位同事运行此程序,它将在数据库中存储数据为 2013 年 8 月 28 日 18:30:00,因为它们比 UTC 早 5.5 小时,因此 2013 年 8 月 29 日 00:00 :00 变成昨天。
当逻辑试图确定对象是否有效时,逻辑是:
if (DateTime.UtcNow.TimeOfDay > model.MyPropertyFromDB.TimeOfDay)
我们正在尝试确定当前时间是否在 00:00:00 和 23:59:59 的范围内
这会失败,因为 14:00(当前时间)不大于 18:30
比较时间的最佳方法是什么?
将值存储为 DateTimeOffSet 有帮助吗,使用 ToLocal() 好吗?
其他注意事项是印度用户正在使用在英国托管的应用,因此需要了解时区。
谢谢
【问题讨论】:
-
您考虑在数据库中将日期保存为 utc 吗?
-
[这个给你解决了吗?][1] [1]:stackoverflow.com/questions/7577389/…
-
@kostyan 我认为 OP 说他做了“然后当它到达数据库时转换为 UTC。”
-
除此之外,您不应该调用
DateTime.Now三次 - 如果超出界限(一天或一小时),您会得到非常奇怪的结果。您应该调用它一次,然后使用结果三次。 (如果您使用UtcNow也一样,这几乎肯定是一个更好的主意。)