将javascript日期时间转换为C#/VB.NET日期时间

本文关键字:时间 日期 VB NET 转换 javascript | 更新日期: 2023-09-27 17:59:57

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

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")。我认为问题出在转换上。

问题出在哪里?我该如何解决?

将javascript日期时间转换为C#/VB.NET日期时间

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

我建议在将JavaScriptDate()对象发布回服务器之前,将其序列化为JSON。然后使用JSON等库将其反序列化为C#DateTime对象。NET。关于序列化和反序列化时可以应用哪些设置,有全面的文档(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);

您混淆了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"