Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 4 将UTC日期时间显示为用户定义的时区_Asp.net Mvc 4_Timezone_Utc - Fatal编程技术网

Asp.net mvc 4 将UTC日期时间显示为用户定义的时区

Asp.net mvc 4 将UTC日期时间显示为用户定义的时区,asp.net-mvc-4,timezone,utc,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.Conv

我在数据库中有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:00,则

Nick = 18-6 = 12 / 12 PM
Harry = 18+1 = 19 / 8PM

时区!=抵消。另外,.NET有很多内置的功能,不需要手动运算。不清楚你想要什么。您实际拥有哪些信息,存储了哪些信息,希望实现哪些目标?请用数据和代码展示示例。将您的所有时间存储在UTC中,并在视图中将其转换为您想要的任何内容want@MattJohnson,请检查我的编辑,希望它现在更清晰。似乎你在问如何在当前线程中存储任何内容。可能是时区id,可能是一些随机字符串。您可能需要单独搜索/询问。请记住,对于现代异步/等待代码,不能保证在同一线程上发生连续性。对于较旧的东西,如
ThreadLocal
ThreadStatic
,这可能会有问题。您可以尝试逻辑调用上下文(
CallContext.LogicalSetData
/
CallContext.LogicalGetData
)。谢谢。。。当前线程就是一个例子。。但我明白了。如果你把你的评论作为答案发表,我可以把它标记为已回答。