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

时间:2013-02-18 09:21:41

标签: c# javascript asp.net vb.net

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

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

有什么问题?我怎么解决?

2 个答案:

答案 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)。

的JavaScript

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

JSON不是每个浏览器都是原生的,因此您需要手动加载它,有关详细信息,请参阅:Browser-native JSON support (window.JSON)

C#使用JSON.NET

DateTime dateTime = JsonConvert.DeserializeObject<DateTime>(hdnTime.Value);