我在数据库中有UTC日期,我在他们的首选项表中有用户时区。
我有一个从UTC转换为用户时间的扩展方法:
public static DateTime ToClientTime(this DateTime dt)
{
TimeZoneInfo cstZone = TimeZoneInfo.FindSystemTimeZoneById("SA Pacific Standard Time"); //Hardcoded timezone
return TimeZoneInfo.ConvertTimeFromUtc(dt, cstZone);
}
正如您在下面的代码中看到的,现在它有一个硬编码的时区名称,我应该通过参数传递该值(传递用户时区)。
在CurrentThread中我设置了用户文化,因此该请求中的所有代码都在该文化中运行(日期格式,资源,数字格式)。 有一种方法可以将用户的时区存储在像CurrentThread这样的全局对象中吗?
我想要完成的是避免将时区传递给上面的扩展方法,而是从像CurrentThread这样的全局对象中获取时区。扩展方法将从Controller代码和Views中调用。
答案 0 :(得分:-1)
你有一个像UTC的基准时间,对吗?您在数据库中没有用户指定的时区。因此,现在您可以根据需要在UTC时区中添加或减去。
可能添加可以提供简单的解决方案。 示例:
Name ----------TimeZone
------------------------
Nick ------- UTC - 6
Hary ------- UTC + 1
因此,如果当前UTC时间是晚上7点或18:00那么
Nick = 18-6 = 12 / 12 PM
Harry = 18+1 = 19 / 8PM