我想获得客户端时区,所以我使用下面的代码
function filltime()
{
document.getElementById("hdnTime").value = new Date();
}
转化
Dim time As Date = DateTime.ParseExact(hdnTime.Value,
"ddd MMM d HH:mm:ss UTCzzzzz yyyy",InvariantCulture)
我没有得到确切的价值。它只显示服务器时间。
但是hdnTime.Value
包含正确的值(“Mon Feb 18 14:46:49 UTC + 0530 2013”)。我认为问题在于转换。
有什么问题?我怎么解决?
答案 0 :(得分:2)
您将DateTime对象与其显示
混淆您看到服务器时间是正常的,因为您看到了当前时区的日期时间表示。
你没有得到的是DateTime的工作原理......
如果您通过带有时区信息的日期时间,那么它将被转换为具有正确偏移量的时区。
如果您想要传递日期时间并按原样获取,则必须删除时区部分。
在你的情况下,无论如何,如果你只需要知道客户时区就可以通过它!
var d = new Date()
var n = d.getTimezoneOffset();
getTimezoneOffset()方法返回UTC时间和本地时间之间的时差,以分钟为单位。
例如,如果您的时区是GMT + 2,则会返回-120。
一般性讨论: 根据我的经验,处理转换为字符串并在不同系统之间传递的datetime的最佳方法是使用ISODATE格式:
DateTime.Now.ToString("s"); //"2013-02-18T11:17:24"
答案 1 :(得分:2)
日期和时间是1种语言的难点,更不用说传递介于2之间的值。
我建议将JavaScript Date()
对象序列化为JSON,然后再将其发回服务器。然后使用诸如JSON.NET之类的库将其反序列化为C#DateTime
对象。有关在序列化和反序列化时可以应用的设置的全面文档(Serializing Dates in JSON)。
function filltime()
{
document.getElementById("hdnTime").value = JSON.stringify(new Date());
}
JSON不是每个浏览器都是原生的,因此您需要手动加载它,有关详细信息,请参阅:Browser-native JSON support (window.JSON)
DateTime dateTime = JsonConvert.DeserializeObject<DateTime>(hdnTime.Value);