我想我过分思考这个问题,我希望有人可以帮助我。
我有一个带有SQL Server后端的ASP.NET应用程序。我将所有日期都以UTC格式存储,并对浏览器的本地时区进行适当的转换。其中一个页面要求开始日期和结束日期(没有时间)。
我正在开始日期并将时间设置为00:00:00(午夜),我正在结束时间并添加23:59:59的时间,以便日期范围覆盖整个天。现在我要做的是做一个SQL查询来搜索这个日期范围内的记录。问题是,SQL中的数据是UTC时间,用户在本地日期和时间输入日期和时间。
我最快的解决方案是将日期和时间转换为UTC,然后搜索记录。但是,通过这样做,我相信ASP.NET会根据服务器时区将给定的时间和日期转换为UTC。
如何根据用户的时区将日期和时间转换为UTC时间?
答案 0 :(得分:1)
当您获取用户的输入时,请确保使用带有DateTimeKind
参数的DateTime构造函数。这样,您可以在创建对象时指定其输入为UTC。
var userInputTime = new DateTime(year, month, day,
hour, minute, second,
DateKind.Utc);
在此DateTime对象上调用.ToUniversalTime()
将无效。
如果您接受他们的输入并使用更简单的构造函数创建DateTime,默认情况下DateTimeKind
将设置为“Local”,因此当您进行UTC转换时,它实际上会更改它。 / p>
答案 1 :(得分:0)
您想查看MySql函数:
CONVERT_TZ(DT,FROM_TZ,转到to_tz)
CONVERT_TZ()将日期时间值dt从from_tz给定的时区转换为to_tz给定的时区,并返回结果值。可以按第5.10.8节“MySQL服务器时区支持”中所述指定时区。 ...
mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');
-> '2004-01-01 13:00:00'
mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00');
-> '2004-01-01 22:00:00'
答案 2 :(得分:0)
您认为是正确的 - 时间转换基于服务器的时区。在ServerVariables(例如)中传递的任何内容都不包含用户的本地时间。
话说回来,你有几个选择:
#2的唯一警告是用户的工作站是否进行时间同步并获得正确的UTC偏移量。
答案 3 :(得分:0)
如果您使用.net 3.5,请使用TimeZoneInfo