将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这样的全局对象中获取时区。扩展方法将从控制器代码和视图中调用。

+0

目前还不清楚你问什么。你实际拥有哪些信息,你在储存什么,你想达到什么目的?请用数据和代码示例。 –

+0

将所有时间存储在UTC中,并将它们转换为您想要的任何视图 – Trix

+0

@MattJohnson,请检查我的编辑,希望现在更清楚。 – Romias

你有一个基准时间像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不需要手动算术就可以为这个内置的很多功能。 –