ASP.NET日期/时间转换

时间:2009-09-06 03:05:31

标签: c# vb.net datetime

我想我过分思考这个问题,我希望有人可以帮助我。

我有一个带有SQL Server后端的ASP.NET应用程序。我将所有日期都以UTC格式存储,并对浏览器的本地时区进行适当的转换。其中一个页面要求开始日期和结束日期(没有时间)。

我正在开始日期并将时间设置为00:00:00(午夜),我正在结束时间并添加23:59:59的时间,以便日期范围覆盖整个天。现在我要做的是做一个SQL查询来搜索这个日期范围内的记录。问题是,SQL中的数据是UTC时间,用户在本地日期和时间输入日期和时间。

我最快的解决方案是将日期和时间转换为UTC,然后搜索记录。但是,通过这样做,我相信ASP.NET会根据服务器时区将给定的时间和日期转换为UTC。

如何根据用户的时区将日期和时间转换为UTC时间?

4 个答案:

答案 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(例如)中传递的任何内容都不包含用户的本地时间。

话说回来,你有几个选择:

  1. 如果您进行任何类型的用户分析,您可以在那里存储用户的UTC偏移量,并将其调用以进行计算。这只是......以及......用户的可靠性。
  2. 在用户填写的输入表单上,您可以使用Javascript(而不是IIS!)来创建或填充具有本地日期/时间的隐藏INPUT字段。 This link可能会对此有所帮助。
  3. #2的唯一警告是用户的工作站是否进行时间同步并获得正确的UTC偏移量。

答案 3 :(得分:0)

如果您使用.net 3.5,请使用TimeZoneInfo