日期时间与两个时区相比?

时间:2015-07-22 20:10:20

标签: c# sql-server vb.net tsql

我有一个存储事件的数据表。事件以当地时间保存。我正在开发一个表单,用户输入过去的日期和时间。在填写表格几次后,我需要记录那些日期和时间,并找到那些时间发生的事件。

问题在于用户正在贬低当地时间,而不是我的。我可以添加偏移量或时区选择。但后来我意识到Day Light节省的时间会让事情变得不起作用。

我无法更改数据表的日期和时间值。在考虑夏令时的同时,我可以将他们的日期和时间转换为我的日期和时间吗?

由于

3 个答案:

答案 0 :(得分:1)

前提:我认为解决问题的理想方法是将存储的日期时间转换为UTC,然后在搜索时使用它。

但是你说你无法改变这些,所以在请求时使用ConvertTime转换它们可能是你最好的第二选择。

  • Here您可以找到所需的所有详细信息。
  • 您可能还想看看Noda Time,这在处理TimeZones和DateTime时非常有用。

答案 1 :(得分:1)

当您将活动时间存储为当地时间时,您将始终遇到夏令时问题。对于时间重叠的事件,无法判断事件是第一次还是第二次发生当地时间具有该值。您已将信息存储为本地时间,从而丢失了信息。如果您将事件时间存储为UTC,则可以避免夏令时问题。

如果不更改您存储的数据,就无法解决夏令时问题。您可以做的最好的事情是将时间从用户的时区转换为UTC,然后转换为您当地的时间。例如:

TimeZoneInfo TimeZone = TimeZoneInfo.GetSystemTimeZones().Where(t => t.StandardName == "W. Europe Standard Time").Single();
DateTime utc = TimeZoneInfo.ConvertTimeToUtc(inputTime);
DateTime local = utc.ToLocalTime();

答案 2 :(得分:0)

也许MyDateTime.ToLocalTime()之类的东西适合你吗?

查看以下文章,它应该有所帮助。 https://msdn.microsoft.com/en-us/library/ms973825.aspx

相关问题