标题是最主要的解释。我非常简单地尝试将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 // ?????这对我来说是一样的格式,所以我想我缺少一些语法了吧?
发布于 2022-07-19 18:11:01
首先,教育数据发布者在以文本方式交换日期时间值时只使用标准的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 );分析,如果你坚持的话,违背我的建议。
产出=7月20日
String input = "20 Jul" ;
MonthDay mdParsed = MonthDay.parse( input , f );
System.out.println( "mdParsed = " + mdParsed );mdParsed =-07-20
您可以从那个LocalDate生成一个MonthDay。
LocalDate ld = md.atYear( 2022 ) ;ld.toString():2022-07-20
您可以使用相同的想法解析日期值。
所有这些都已经在堆栈溢出中被多次覆盖。寻找更多的知识。
https://stackoverflow.com/questions/73041167
复制相似问题