将UTC日期时间显示到用户定义的时区
问题描述:
我在数据库中使用UTC的日期,并且我的用户时区在他们的偏好表中。将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这样的全局对象中获取时区。扩展方法将从控制器代码和视图中调用。
答
你有一个基准时间像UTC,对不对?您没有数据库中的用户指定时区。因此,现在您可以根据需要添加或减去UTC时区。
可能的补充可以提供一个简单的解决方案。 例子:
Name ----------TimeZone
------------------------
Nick ------- UTC - 6
Hary ------- UTC + 1
因此,如果当前UTC时间是下午7点或18点,然后
Nick = 18-6 = 12/12 PM
Harry = 18+1 = 19/8PM
+0
时区!=偏移。而且,.NET不需要手动算术就可以为这个内置的很多功能。 –
目前还不清楚你问什么。你实际拥有哪些信息,你在储存什么,你想达到什么目的?请用数据和代码示例。 –
将所有时间存储在UTC中,并将它们转换为您想要的任何视图 – Trix
@MattJohnson,请检查我的编辑,希望现在更清楚。 – Romias