如何确保我的所有日期时间都存储为UTC而不通过所有代码?这是否必须在db中设置?怎么样? 感谢。
答案 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);
}