我希望格式化日期为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日"。我不想要这个问题的示例代码。我想知道我在这里做错了什么?有人可以提出解析这样一个日期的方法吗?
感谢。
答案 0 :(得分:3)
你有三个问题。
YYYY-MM-DD
解析日期。这不是数据的格式,这就是解析失败的原因。Date
对象保留有关特定格式的信息。它没有。相反,您可以从一种文本格式解析为Date
,然后使用另一种DateFormat
(使用所需的输出格式)将Date
格式化为String
。无论您如何到达Date.toString()
。Date
将始终使用相同的格式
YYYY-MM-DD
的格式并不是您想要的 - 您想要yyyy-MM-dd
。 YYYY
是"周年"和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)
问题是您的dateString
与simpleDateFormat
格式中指定的模式不匹配。期望格式为YYYY-MM-DD
的日期,可以找到这些符号的含义here。