我在尝试使用以下格式解析日期时遇到错误:
2001年3月26日 2001年8月15日
我正在使用下一个代码:
private void parseDate(String firstDate) {
Date fDate = null;
try {
fDate = new SimpleDateFormat("dd-MMM-yyyy").parse(firstDate);
} catch (ParseException e) {
e.printStackTrace();
}
}
但是我收到错误消息:无法解析的日期:“ 15-August-2001”。我不太确定我必须使用哪种日期格式。
谢谢
答案 0 :(得分:2)
LocalDate
.parse(
"15-August-2001" ,
DateTimeFormatter.ofPattern( "dd-MMMM-uuuu" , Locale.US )
)
.toString()
提示:最好仅使用标准的ISO 8601格式以文本形式交换日期时间数据。
Answer by Deadpool在技术上是正确的,但已过时。现代方法使用 java.time 类,该类通过采用JSR 310取代了传统的日期时间类。
LocalDate
LocalDate
类表示没有日期,没有time zone或offset-from-UTC的仅日期值。
DateTimeFormatter
使用DateTimeFormatter.ofPattern
定义自定义格式设置模式。格式代码与旧版SimpleDateFormat
类并不完全相同,因此请务必仔细研究Javadoc。
指定Locale
以确定用于翻译月份名称的语言。
String input = "15-August-2001" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MMMM-uuuu" , Locale.US ) ;
LocalDate ld = LocalDate.parse( input , f ) ;
System.out.println( "ld.toString(): " + ld ) ;
请参阅此code run live at IdeOne.com。
ld.toString():2001-08-15
答案 1 :(得分:0)
使用Locale.US
,以便考虑美国格式的月份名称
SimpleDateFormat("dd-MMM-yyyy",Locale.US)