【问题标题】:Convert javascript date time to C#/VB.NET date time将 javascript 日期时间转换为 C#/VB.NET 日期时间
【发布时间】:2013-02-18 09:21:40
【问题描述】:

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

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

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

【问题讨论】:

  • hdnTime 是隐藏控件还是必须显示?
  • 当您必须以字符串形式存储、移动、日期时,请始终使用 ISODATE 格式
  • 我怎样才能通过javascript?你能提供更多细节吗?

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


【解决方案1】:

日期和时间在 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);

【讨论】:

  • @balaji 这样你会丢失时区信息,正如我在回答中所说的那样,但你将获得一个不可读的值而不是使用 ISOdate
【解决方案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"

【讨论】:

  • 我没有得到你。 “Mon Feb 18 14:46:49 UTC+0530 2013”​​是我的 javascript 返回字符串。只是我想将其分配给数据类型“日期”
  • 谢谢。现在只有我了解真正的问题
猜你喜欢
  • 2016-12-17
  • 1970-01-01
  • 2011-10-05
  • 2011-05-30
  • 2012-08-03
  • 2023-03-26
  • 2012-05-28
  • 1970-01-01
相关资源
最近更新 更多