我想在ASP.Net MVC应用程序中使用客户端时区名称(例如印度标准时间)。
所以,我可以使用TimeZoneInfo.FindSystemTimeZoneById(TimeZoneName)
函数。
我尝试过new Date().getTimezoneOffset()
(reference)
但是,本守则中的夏令时存在问题。
在javascript中,我也试过了new Date().toString()
但是,这会以不同的浏览器格式提供不同的格式。
在firefox,chrome&苹果浏览器, 答案是“Tue May 08 2012 14:00:00 GMT + 0530(印度标准时间)”
在IE8中,它是“Tue May 8 14:00:00 UTC + 0530 2012”
歌剧也有类似的问题。
因此,此方法不适用于IE&戏。
识别客户端TimeZone的最佳方法是什么?
答案 0 :(得分:3)
最好和最常用的方法是通过客户端的ip来识别客户位置通过某些第三方库和数据库...然后根据客户的位置决定时区
答案 1 :(得分:3)
您是否需要知道时区或仅与UTC的偏移量?由于时区不是ISO标准,几乎可以随意更改,我更喜欢使用客户端与UTC的偏移量,我总是在登录时从客户端获取它,或者每当他们提交我需要客户端时间的表单时。有时我会计算出客户端的GTM偏移量并坚持使用它在我显示或使用时间的任何地方。
所以我有一个像这样的全局JavaScript函数,它将给定的本地日期作为通用字符串返回:
function aspClientDateTime(dateObject) {
return dateObject.getFullYear() + '-'
+ this.leadingZero((dateObject.getMonth() + 1), 2) + '-'
+ this.leadingZero(dateObject.getDate(), 2) + ' '
+ this.leadingZero(dateObject.getHours(), 2) + ':'
+ this.leadingZero(dateObject.getMinutes(), 2) + ':'
+ this.leadingZero(dateObject.getSeconds(), 2);
}
在表单提交上,我获取当前的客户日期并将其存储在以下格式中:
myForm.clientTime.val(aspClientDateTime(new Date()));
然后你知道它在浏览器中的时间,你可以在服务器上计算UTC偏移等。
时区的问题在于,任何政府明天都会推出新的政府,就像萨摩亚最近所做的那样。通常,我想知道用户现在的偏移量,而不是他们所在的时区。
如果是真正需要的后者,你可能不得不像Skype那样问他们。
答案 2 :(得分:0)
有一个用于通过JavaScript检测时区的库。它会给你一个足够好的时区的名字。它不进行地理定位或ip查找,所以速度非常快,但并不是非常精确。例如,它将为中欧时区的任何人返回“欧洲/柏林”。但是,对于服务器端日期时间标准化来说应该足够了。