2016-11-28 41 views
1

我想显示本地系统日期时间格式在服务器上的日期,但它采取的服务器日期时间格式的本地系统日期时间格式。在localhost运行时运行良好,但在服务器运行时,格式为MM/dd/yyyy(US格式),与系统日期时间格式无关。我已经尝试过这些但没有想要的结果C#:在服务器

string DateTimeFormat = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern 

System.Threading.Thread threadForCulture = new System.Threading.Thread(delegate() { }); 
string DateTimeFormat = threadForCulture.CurrentCulture.DateTimeFormat.ShortDatePattern; 

有没有其他方法可以实现这个目标?

+1

可以使用dt.ToString( “DD/MM/YYYY”);这将日期对象(dt)转换为dd/MM/yyyy格式。 –

+0

@SouvikGhosh,我不想要特定的格式。它必须按照本地系统日期时间格式进行更改,并在本地格式更改时进行更改 – Sanjay

回答

0

嘛,你使用CurrentCulture和代码运行在服务器上,所以能有什么办法。服务器不会奇怪地为每个请求更改其环境设置。

如果你想以符合用户浏览网站的首选语言,你有最好的赌注是Accept-Language头。 This answer详细说明如何将其转换为ASP.NET MVC中的CultureInfo。请注意,这仍然是一种有限的方法,因为您仅限于服务器支持的内容和浏览器发送的内容。除了请求头信息以外,服务器没有别的办法来确定用户的偏好,而且请求头不能真正编码,我宁愿使用ISO-8601日期格式的de-de。然后

最简单的方法是挑基于请求头一个合理的默认,并提供一个选项来改变它。即使在使用JavaScript的客户端机器上,您也无法获取最多的信息。网页在遵守操作系统用户偏好的程度上存在限制。所以一个简单的退出方法是添加一个设置,以便每个人都可以改变它。

0

这是我对另一个线程的StackOverflow答案,这应该是你正在寻找的。

How to get current user timezone in c#

的关键是总是店DateTime是否在“UTC时区”的服务器上(即始终是SQL Server计算机上使用GetUTCDate()而非GetDate()),然后让你的客户通过哪个时区他们在。

然后,你只需要一些代码结合这两个。

(道歉不cut'n'pasting从我的其他文章响应的代码,但它已经很好地描述了那里。)