我试图以本地系统日期时间格式显示服务器上的日期,但它采用的是服务器日期时间格式。它在localhost中运行时工作正常,但在服务器中运行时,格式为MM / dd / yyyy(美国格式),与系统日期时间格式无关。我已经尝试了这些但没有预期的结果
string DateTimeFormat = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern
System.Threading.Thread threadForCulture = new System.Threading.Thread(delegate() { });
string DateTimeFormat = threadForCulture.CurrentCulture.DateTimeFormat.ShortDatePattern;
还有其他方法可以实现吗?
答案 0 :(得分:0)
好吧,您正在使用CurrentCulture
并且代码在服务器上运行,所以您的期望是什么。服务器不会为每个请求神奇地更改其环境设置。
如果您想要符合查看网站的用户的首选语言,那么您最好的选择是Accept-Language
标题。 This answer详细说明了如何将其转换为ASP.NET MVC中的CultureInfo
。请注意,这仍然是一种有限的方法,因为您只限于服务器支持的内容和浏览器发送的内容。除了请求标头信息之外,服务器没有其他方式来确定用户的首选项,并且请求标头无法真正编码我更喜欢使用ISO-8601日期格式的de-de。
最简单的方法是根据请求标头选择合理的默认值,并提供更改它的选项。即使在使用JavaScript的客户端计算机上,您也无法获得大部分信息。网页仅限制其与OS用户偏好的距离。因此,选择退出的一种简单方法是添加设置,以便每个人都可以更改它。
答案 1 :(得分:0)
这是我的StackOverflow对不同主题的回答,这应该是您正在寻找的内容。
How to get current user timezone in c#
关键是始终将日期时间存储在" UTC时区"在您的服务器上(即在SQL Server计算机上始终使用GetUTCDate()
而不是GetDate()
),然后让您的客户端通过它们所在的时区。
然后,你只需要一些结合了两者的代码。
(对于没有剪切的道歉并且从我的其他文章回复中粘贴代码,但它已经很好地描述了。)