如何转换1994年3月1日有序数格式的日期?

时间:2014-10-10 19:32:19

标签: java date-format

我希望格式化日期为1990年3月1日的格式。日期应格式化为YYYY-MM-DD。我有以下代码。它给了我一个不可理解的日期。从这一点我可以理解,这不是格式化这个日期的正确方法,因为它不是一个有效的模式。

public class DateFormattingTest {
    public static void main(String[] args) throws ParseException {
        String dateString = "1st March 1984";

        dateString = dateString.replaceFirst("[a-zA-Z]{2}","") ;
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("d MMMM yyyy");
        Date rightNow = simpleDateFormat.parse(dateString);
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        String formattedDate = dateFormat.format(rightNow);
        System.out.println(formattedDate);
    }
}

我已修改并查找了日期格式化模式。我找不到与这种模式相关的东西" 1990年3月1日"。我不想要这个问题的示例代码。我想知道我在这里做错了什么?有人可以提出解析这样一个日期的方法吗?

感谢。

3 个答案:

答案 0 :(得分:3)

你有三个问题。

  • 首先,您尝试使用格式YYYY-MM-DD 解析日期。这不是数据的格式,这就是解析失败的原因。
  • 其次,您期望Date对象保留有关特定格式的信息。它没有。相反,您可以从一种文本格式解析为Date,然后使用另一种DateFormat(使用所需的输出格式)将Date格式化为String。无论您如何到达Date.toString()
  • Date将始终使用相同的格式
  • 第三,您YYYY-MM-DD的格式并不是您想要的 - 您想要yyyy-MM-ddYYYY是"周年"和DD是#34;#34;。

我不知道任何SimpleDateFormat方法可以处理输入字符串的序数部分("第一","第二"等) - 你和#39; ll可能需要做一些工作来剥离它。一旦你获得了诸如" 1990年3月1日和#34;您可以使用模式SimpleDateFormat使用d MMMM yyyy进行解析。确保正确设置时区和区域设置。

答案 1 :(得分:2)

您的日期1st未合并到Java DateFormat中。如果您可以切换到1并使用相应的DateFormat,则解析日期将有效,否则您需要通过剥离{{ordinal number转换为number 1}}。 This可能是一个很好的相关帖子。

答案 2 :(得分:0)

问题是您的dateStringsimpleDateFormat格式中指定的模式不匹配。期望格式为YYYY-MM-DD的日期,可以找到这些符号的含义here