LocalDate.返回DateTimeParseException



标题是最主要的解释。我很简单地试图解析一个charSequence/String到一个LocalDate。我有两种不同的格式,所以我尝试了两次解析,但都没有成功。相关代码:

public static LocalDate ToDate(CharSequence charSequence ){ // Or String string
LocalDate date = null;
try{
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(standardFormat); 
// standardDateFormat "dd MMMM, yyyy"
date = LocalDate.parse(charSequence, formatter);
} catch (DateTimeParseException a){
Log.d("ToDate", charSequence + " =/= " + standardFormat + " :: standard format failure");
} finally {
try {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(simpleDateFormat); 
// simpleDateFormat = "dd MMM"
date = LocalDate.parse(charSequence, formatter);
} catch (DateTimeParseException a) {
Log.d("ToDate", charSequence + " =/= " + simpleDateFormat + " :: simple format failure");
}
}
return date;
}

返回异常:

2022-07-19 10:10:14.759 9625-9625/com.learn.myapplication D/ToDate: 19 Jul =/= dd MMMM, yyyy :: standard format failure
2022-07-19 10:10:14.760 9625-9625/com.learn.myapplication D/ToDate: 19 Jul =/= dd MMM :: simple format failure // ?????

对我来说,这看起来像相同的格式,所以我想我遗漏了一些语法?

首先,教育数据发布者在以文本形式交换日期-时间值时只使用标准的ISO 8601格式。代码中看到的本地化文本应该仅用于向用户展示,而不是用于数据交换或数据存储。

日期的标准格式是YYYY-MM-DD。——MM-DD.

对于月份和年月日值,使用MonthDay。如果没有年份,则不能在日期类型中放置这样的值。

如果您坚持解析本地化字符串,则提供一个Locale,通过它来确定解析诸如月份名称之类的项目的人类语言和文化规范。

不要用自己的消息覆盖异常。因此,我们无法正确诊断您的问题。

生成本地化文本。

Locale locale = Locale.US ;
ZoneId z = ZoneId.of( "Asia/Tokyo" ) ;
MonthDay md = MonthDay.now( z ) ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd MMM" ).withLocale( locale ) ;
String output = md.format( f) ;
System.out.println( "output = " + output );

解析,如果你坚持,违背我的建议。

output = 20 Jul

String input = "20 Jul" ;
MonthDay mdParsed = MonthDay.parse( input , f  );
System.out.println( "mdParsed = " + mdParsed );

mdParsed =—07-20

您可以从MonthDay生成LocalDate

LocalDate ld = md.atYear( 2022 ) ;

ld.toString (): 2022-07-20

您可以使用相同的方法解析日期值。

所有这些已经在Stack Overflow上讨论过很多次了。

相关内容

  • 没有找到相关文章

最新更新