将UTC日期时间显示为用户定义的时区

时间:2017-02-27 04:54:36

标签: asp.net-mvc-4 timezone 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这样的全局对象中获取时区。扩展方法将从Controller代码和Views中调用。

1 个答案:

答案 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