我想要按以下格式给出日期格式: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);
}
}
我也修改并寻找了日期格式模式。我找不到与此模式“1st March 1990”相关的内容。我不需要这个问题的示例代码。我想知道我在这里做错了什么?有人可以建议一种解析此类日期的方法吗?
谢谢。
最佳答案
您遇到了三个问题。
- 首先,您尝试使用
YYYY-MM-DD
格式解析日期。这不是您的数据格式,这就是解析失败的原因。 - 其次,您期望
Date
对象保留有关特定格式的信息。事实并非如此。相反,您可以从一种文本格式解析为Date
,然后使用另一种DateFormat
(具有所需的输出格式)来格式化Date
转换为字符串
。Date.toString()
将始终使用相同的格式,无论您如何得出Date
。 - 第三,您的
YYYY-MM-DD
格式并不是您真正想要的 - 您需要yyyy-MM-dd
。YYYY
是“星期”,DD
是“一年中的某天”。
我不知道有任何 SimpleDateFormat
方法可以处理输入字符串的序数部分(“1st”、“2nd”等) - 您可能需要添加一些努力将其剥离。获得诸如“1 March 1990”之类的值后,您可以使用 d MMMM yyyy
模式通过 SimpleDateFormat
进行解析。确保正确设置时区和区域设置。
关于java - 如何转换序数格式的日期 1st March 1994?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26306797/