【问题标题】:Convert weird date format to short DateTime将奇怪的日期格式转换为短 DateTime
【发布时间】:2012-05-06 23:55:25
【问题描述】:

我有一个从 ExtJS 日期时间选择器返回的日期字符串,如下所示:

Wed Apr 25 2012 00:00:00 GMT+0300 (GTB Daylight Time)

从这里我需要使用 C# 或 JavaScript 以这种格式:YYYY-mm-dd。 我怎么能这样做?我试过使用 DateTime.Parse 并且无法解析。 有什么想法吗?

【问题讨论】:

  • 我会去修改你的 js 代码,以获得可以轻松解析的不变格式(例如刻度)(例如 unix-timestamp、iso-format)...

标签: c# javascript asp.net html


【解决方案1】:

您似乎并不关心时间和时区信息,因此您实际上可以使用DateTime.ParseExact 来解析日期。假设月份部分可能只是一个数字(例如 2012-04-01 是 Sun Apr 1 2012),您需要使用的模式是 ddd MMM d yyyy

“最难”的部分实际上是切分时间和时区部分。如果月份中的日期是一位数,则必须取长度为 14 的子字符串;否则长度为 15。这是一种获取字符串中第 4 个空格字符的索引的方法:

var str = "Wed Apr 25 2012 00:00:00 GMT+0300 (GTB Daylight Time)";
var index = -1;
for (var i = 0; i < 4; i += 1)
  index = str.IndexOf(' ', index + 1);

然后您可以将日期解析为DateTime

var date = DateTime
  .ParseExact(str.Substring(0, index), "ddd MMM d yyyy", CultureInfo.InvariantCulture);

可以使用您需要的任何格式和文化将其格式化回字符串。

【讨论】:

    【解决方案2】:

    在 .NET 中,您可以使用 保证 格式的日期字符串表示形式,您可以使用 DateTime.ParseExact 对其进行解析:

    var input  = "Wed Apr 25 2012 00:00:00 GMT+0300 (GTB Daylight Time)"
                                .Substring(0, 15);
    var format = "ddd MMM dd YYYY";
    var date = DateTime.ParseExact(input, format, CultureInfo.InvariantCulture);
    
    // Now date is a DateTime holding the date
    
    var output = date.ToString("yyyy-MM-dd");
    
    // Now output is 2012-04-25
    

    【讨论】:

      【解决方案3】:

      也许这可以帮助你Click

      【讨论】:

      • 只有在你提示他DateTime.ParseExactDateTime.TryParseExact 时才会有所帮助
      【解决方案4】:

      使用 Javascript 试试这个。

      var d = new Date('Wed Apr 25 2012 00:00:00 GMT+0300 (GTB Daylight Time)');
      var curr_day = d.getDate();
      var curr_month = ('0'+(d.getMonth()+1)).slice(-2)
      var curr_year = d.getFullYear();
      var new_date  = curr_year+"-"+curr_month+"-"+curr_day;
      

      【讨论】:

      • 不要忘记前导零
      • 我宁愿使用 unix 表示...没有自定义的摆弄...只是简单的纯代码...
      • @David 这正是自定义 iso 格式的问题:) ... unix 会更直接和万无一失
      • @David:我已经编辑了答案。现在它将添加前导零。
      【解决方案5】:

      在 JavaScript 中

      new Date("Wed Apr 25 2012 00:00:00 GMT+0300 (GTB Daylight Time)")
      

      会给你一个日期对象。然后,您可以通过选择 (UTC) 年、月和日将其格式化为您的日期格式(或者最好是 ISO8601,或使用 .getTime() 从 epoc 开始的毫秒数)

      【讨论】:

        猜你喜欢
        • 2012-10-28
        • 1970-01-01
        • 2015-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-05
        • 1970-01-01
        相关资源
        最近更新 更多