【问题标题】:Parse Javascript date to C# DateTime, FF data is other then Chrome date将 Javascript 日期解析为 C# DateTime,FF 数据不是 Chrome 日期
【发布时间】:2014-12-05 09:26:21
【问题描述】:

我将 javascript 日期转换为 C# DateTime。

当我使用 firefox 时,JavaScript 将日期返回给我的 C# 函数: string jsDate = "Fri Dec 05 2014 00:00:00 GMT+0100";

所以,我使用以下方法将其解析为 C# DateTime:

DateTime.TryParseExact(JsDate, "ddd MMM dd yyyy HH:mm:ss 'GMT'K", CultureInfo.InvariantCulture, DateTimeStyles.None, out Date)

当我使用 Chrome 时,js 以格式返回我日期:"Fri Dec 05 2014 00:00:00 GMT+0100 (Środkowoeuropejski czas stand.)" ( 中欧标准时间)

如何解析第二次?

【问题讨论】:

  • 使用TryParseExact,您在末尾有一个DateTime,而不是string。这意味着,您已经有了一个基于您的"Fri Dec 05 2014 00:00:00 GMT+0100" 字符串的DateTime。不需要额外的解析。我不知道Środkowoeuropejski czas stand 是什么,但它似乎只是您的DateTime 的字符串表示形式的附加表示。
  • @SonerGönül:我认为关键在于 Chrome 提供的输入不适合代码 - 这不是一个写得很清楚的问题。
  • 或者,您可以尝试使用毫秒/秒作为公共基础,请参阅:stackoverflow.com/a/1877827/265165
  • @JonSkeet 是的,听起来像这样。当然不清楚的问题,但显然 OP 尝试使用不适当的 Chrome 字符串表示。

标签: javascript c# date datetime


【解决方案1】:

基本上,您不应该使用浏览器中的默认字符串表示。否则,您需要知道它将使用哪种语言来表示月份名称等,而您基本上是在打一场失败的战斗。

我强烈建议您在将字符串从浏览器传递到服务器时以文化中立的方式格式化字符串 - 例如如 ISO-8601,例如 yyyy-MM-ddTHH:mm:ssZ。您应该考虑是否需要时区偏移 - 为简单起见,您可能只想以 UTC 发送它。 (如果您确实从 UTC 发送偏移量,您可能应该在 C# 代码中将其解析为 DateTimeOffset。)

【讨论】:

    【解决方案2】:
    String dateString = "Fri Dec 05 2014 00:00:00 GMT+0100 (Środkowoeuropejski czas stand.)"
    dateString = dateString.subStr(0,dateString.indexOf('(')-1);
    DateTime.TryParseExact(dateString, "ddd MMM dd yyyy HH:mm:ss 'GMT'K", CultureInfo.InvariantCulture, DateTimeStyles.None, out Date)
    

    【讨论】:

    • 他在哪里做的日期字符串的子串?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    • 2013-03-27
    • 1970-01-01
    相关资源
    最近更新 更多