簡體   English   中英

LocalDate.parse 返回 DateTimeParseException

[英]LocalDate.parse Returning 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 );

解析,如果你堅持,反對我的建議。

輸出 = 7 月 20 日

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 上多次介紹過。 搜索以了解更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM