在我的应用程序中默认所有时间到UTC

时间:2009-11-18 21:41:15

标签: asp.net

如何确保我的所有日​​期时间都存储为UTC而不通过所有代码?这是否必须在db中设置?怎么样? 感谢。

1 个答案:

答案 0 :(得分:1)

在Web应用程序中,非UTC DateTime可以通过两种方式进入您的数据库。

1)你做到了。搜索所有出现的DateTime.Now。那些需要是DateTime.UtcNow。仍然,查找和替换不会涵盖所有内容,因为您需要更新代码中的每个位置,以便向用户显示这些日期以将其转换为本地时间。

2)您的用户向您发送了日期/时间。没有自动化的方法来寻找这些。您需要手动查看用户可用于传递日期/时间的每个页面。要么作为要保存到数据库的数据,要么作为要在查询中使用的过滤器。在使用它们之前,您需要知道它们的UTC偏移量并将其应用于这些事件。

确保在用户进入您的网站后立即捕获用户的UTC偏移量。截至目前,唯一的方法是通过javascript。如果您有一个入口点(即登录页面),那么您可以将其放在那里。否则,您需要在母版页中执行此操作,或者,如果您没有母版页,则需要输入他们可以输入的每个页面。

在javascript中获取UTC Offset使用以下代码:

var now = new Date();
int Offset = now.getTimezoneOffset()

然后将偏移量传递回服务器。在那里,您可以创建两个函数来处理从/到UTC的转换。

UtcOffset保存javascript Offset:

public static DateTime ConvertFromUtcToClientTime(DateTime utcDateTime)
{
    return utcDateTime.AddMinutes(-UtcOffset);
}

public static DateTime ConvertFromClientTimeToUtc(DateTime clientDateTime)
{
    return clientDateTime.AddMinutes(UtcOffset);
}