【问题标题】:Parsing Date-and-Times from JavaScript to C#将日期和时间从 JavaScript 解析为 C#
【发布时间】:2012-06-03 16:48:26
【问题描述】:

我尝试将一些 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

我做错了什么?我预计日期/时间是 2012 年 6 月 3 日下午 4:30:43

【问题讨论】:

    标签: c# javascript


    【解决方案1】:

    您得到的结果是正确的,但请检查您的DateTimeKind 属性。您会注意到它没有设置为UTC,而是设置为Local

    您可以使用DateTimeStyles.AdjustToUniversal 生成DateTime,并将Kind 设置为UTC

    DateTime dateTime;
    DateTime.TryParseExact(
        value,
        "yyyyMMddHHmmss",
        CultureInfo.InvariantCulture,
        DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal,
        out dateTime);
    

    查看它在 ideone 上的工作。

    【讨论】:

    【解决方案2】:

    如果您只想使用(例如 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 )
    

    这样你就可以保留你的数据结构而不用处理解析。

    【讨论】:

      【解决方案3】:

      您必须将日期参数以 ​​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' 
      

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2013-03-27
        • 1970-01-01
        • 2016-09-12
        • 1970-01-01
        • 1970-01-01
        • 2011-04-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多