【问题标题】:Invalid date while formating using simple date format使用 simpledateformat 格式化时日期无效
【发布时间】:2014-08-08 19:25:45
【问题描述】:

我有一个日期字符串Mon Feb 8 00:00:00 UTC+0530 1954。我想把它转换成DD/MM/YYYY的格式。输出始终为08/38/1954 or 09/39/1954

我使用了以下代码。

SimpleDateFormat format = new SimpleDateFormat("MM/DD/YYYY", Locale.US);
System.out.println(format.format(new Date(dateStr)));

【问题讨论】:

标签: java date datetime simpledateformat sqldatetime


【解决方案1】:

SimpleDateFormat中的DD代表“年中的日”,你想要“月中的日”,即dd

还要注意YYYY 表示“周年”,根据日历回退到“年”,表示为yyyy。我想,你想要yyyyanyways。

【讨论】:

    【解决方案2】:

    您需要使用 parse() 方法将字符串日期转换为定义的 SimpleDateFormat。

     SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy", Locale.US);
     Date date = format.parse(dateStr);
     System.out.println(format.format(date));
    

    【讨论】:

    • 这将以给定格式输出当前日期。他特别想输出给定的日期,需要先解析。
    • 他有一个非常具体的输入字符串,你会尝试将它与格式模式匹配。
    • 通过使用上面的代码,我得到了解析异常。但是当我创建新的日期对象和格式时,我得到了正确的输出。为什么会出现解析器异常。
    【解决方案3】:

    试试这个:

    SimpleDateFormat frmt = new SimpleDateFormat("E MMM d HH:mm:ss zZ yyyy", Locale.US);
    Date dateStr = frmt.parse("Mon Feb 8 00:00:00 UTC+0530 1954");
    

    【讨论】:

    • 我的回答确实没有必要,但我喜欢用一些正则表达式来解决这样的问题。这就像重新设计轮子。
    【解决方案4】:

    SimpleDateformat 中的D 代表day in year,其中d 代表day in month,因此将DD 替换为dd

    类似地用yyyy替换YYYY

    【讨论】:

      猜你喜欢
      • 2012-05-05
      • 1970-01-01
      • 1970-01-01
      • 2012-11-09
      • 1970-01-01
      • 1970-01-01
      • 2020-03-10
      相关资源
      最近更新 更多