0

我想获取客户端时区,所以我使用下面的代码

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”​​)。我认为问题在于转换。

问题是什么?我该如何解决?

4

2 回答 2

2

日期和时间在 1 种语言中是一种痛苦,更不用说在 2 之间传递值了。

我建议将 JavaScriptDate()对象序列化为 JSON,然后再将其发送回服务器。DateTime然后使用JSON.NET等库将其反序列化为 C#对象。关于序列化和反序列化时可以应用哪些设置,有综合文档(JSON 中的序列化日期)。

JavaScript

function filltime() 
{
    document.getElementById("hdnTime").value = JSON.stringify(new Date());
}

JSON 并非每个浏览器都原生,因此您的意思是需要手动加载它,有关更多信息,您可以参考:浏览器原生 JSON 支持 (window.JSON)

C# 使用JSON.NET

DateTime dateTime = JsonConvert.DeserializeObject<DateTime>(hdnTime.Value);
于 2013-02-18T10:47:00.463 回答
2

您将 DateTime 对象与其显示混淆了

您看到服务器时间是正常的,因为您看到的是当前时区的日期时间表示。

你没有得到的是 DateTime 是如何工作的......

如果您传递带有时区信息的日期时间,那么它将转换为具有正确偏移量的时区。

如果您想传递一个日期时间并按原样获取它,那么您必须删除时区部分。

无论如何,在您的情况下,如果您只需要知道客户端时区,只需通过它!

var d = new Date()
var n = d.getTimezoneOffset();

getTimezoneOffset() 方法返回 UTC 时间和本地时间之间的时差,以分钟为单位。

例如,如果您的时区是 GMT+2,则将返回 -120。

对于一般性讨论:根据我的经验,处理日期时间转换为字符串并在不同系统之间传递的最佳方法是使用 ISODATE 格式:

DateTime.Now.ToString("s"); //"2013-02-18T11:17:24"
于 2013-02-18T10:04:14.610 回答