将日期和时间从 JavaScript 解析为 C#
本文关键字:JavaScript 日期 时间 | 更新日期: 2023-09-27 18:36:05
我有一些JavaScript代码,我正在尝试传递给我的Web服务。 我的JavaScript代码应该以UTC格式发送日期。在本地,我生成代码的时间是下午 12:30:43。当我执行我的JavaScript代码时,生成了以下日期/时间:
2012-06-03T20:30:43.000Z
该日期/时间是从以下代码生成的:
var now = new Date();
var utcDate = new Date(
now.getUTCFullYear(),
now.getUTCMonth(),
now.getUTCDate(),
now.getUTCHours(),
now.getUTCMinutes(),
now.getUTCSeconds()
);
当我将日期/时间从 JavaScript 传递回我的 Web 服务时,它被序列化,如下所示:
20120603163043
在这一点上,这对我来说是正确的。然后,我需要获取该字符串并将其转换为 C# 中的日期/时间。为此,我使用以下 C# 代码:
DateTime _value = DateTime.MinValue;
DateTime.TryParseExact(value, "yyyyMMddHHmmss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out _value)
发生这种情况时,我会得到以下日期/时间。2012/6/3 12:30:43
我做错了什么?我期待日期/时间是 6/3/2012 4:30:43 PM
您得到的结果是正确的,但请检查DateTime
的Kind
属性。您会注意到它不是设置为UTC
而是设置为Local
。
您可以使用DateTimeStyles.AdjustToUniversal
生成Kind
设置为 UTC
的DateTime
。
DateTime dateTime;
DateTime.TryParseExact(
value,
"yyyyMMddHHmmss",
CultureInfo.InvariantCulture,
DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal,
out dateTime);
看到它在 ideone 上工作。
如果你只是想使用(例如webAPI)进行序列化,我发现JS toISOString
非常有用和兼容的。
//JAVASCRIPT
var d = new Date();
$toPut.dateTime = d.toISOString();
$toPut.put()
//C#
[Put("/setup/dateTime"), HttpPut]
public HttpResponseMessage SetDateTime([FromBody]DateTime dateTimeSettings )
这样,您就可以保留数据结构,而不处理解析。
必须将
日期参数作为 UTC 格式传递给 Web 服务,然后使用 TryParse 方法将其转换为 C# 日期对象。
试试这个:
//Javascript
var now = new Date(); //just like: 'Thu, 21 Mar 2013 12:44:40 GMT'
var utcNowString = now.toUTCString(); //pass this parameter to your web service
这是 C# 代码:
DateTime date;
DateTime.TryParse(jsDateString, out date); //parsed as: '21.03.2013 14:44:40'
希望这有帮助。