【问题标题】:Can't get LocalDate to Parse correctly无法正确解析 LocalDate
【发布时间】:2022-02-03 16:37:36
【问题描述】:
String date = "08/02/2022 Tuesday";
DateTimeFormatter LONG_DATE_FORMAT_ddMMyyyyEEEE = ofPattern("dd/MM/yyyy EEEE");
LocalDate.parse(date, LONG_DATE_FORMAT_ddMMyyyyEEEE);

我收到带有以下消息的 DateTimeParseException:Text 08/02/2022 Tuesday' could not be parsed at index 11.

我想这是我格式的 EEEE 方面的问题,但我似乎不明白应该用什么代替它。

这是java 1.8.0_311

【问题讨论】:

  • 您使用什么语言环境?
  • 提示:尝试使用DateTimeFormatter 来格式化一个值,这很可能表明出了什么问题。和 Lajos 一样,我猜这是一个语言环境问题
  • 确实是Locale问题,第一次用这个包,谢谢大家。

标签: java localdate


【解决方案1】:

我们需要 DateTimeFormatter 类来正确格式化日期字符串。我们还需要将字符串日期转换为 LocalDate 对象并再次转换回字符串以显示。 DateTimeParseException 类处理任何不希望的结果。

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;

class Main {

    public static void main(String[] args) {

    try{

        String date = "08-02-2022 Tuesday";
        DateTimeFormatter pattern = 
            DateTimeFormatter.ofPattern("dd-MM-yyyy eeee");

        // parsing string date to LocalDate obj
        // The part you were missing 
        LocalDate formattedDate = LocalDate.parse(date, pattern);

        // Again converting to string 
        System.out.println(formattedDate.format(pattern));
        }

        // handling exception for unparseble dates
        catch(DateTimeParseException x){
            System.out.println("The given date cannot be parsed");
        }
    }
}

【讨论】:

    【解决方案2】:

    LocalDate 包含日、月和年(在 +999999999-12-31 和 -999999999-12-31 之间变化)

    解析会拒绝时间和其他值之类的内容。如果您想要星期几,可以使用如下函数:

        // Parses the date
        LocalDate dt = LocalDate.parse("2018-11-27");
    
        // Prints the day
        System.out.println(dt.getDayOfWeek());
    

    【讨论】:

    • 我认为这可能是解决问题的更好方法。我可能会选择这个,谢谢。
    • 我同意你的想法,我认为你不应该使用任何“暂时”适用于每个项目的代码,但有时最好使用解决问题的东西来追求进步。
    【解决方案3】:

    这对我有用:

    String date = "08/02/2022 Tuesday";
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy EEEE");
        
    LocalDate time = LocalDate.parse(date, formatter);
    System.out.println(time.format(formatter));
    

    【讨论】:

    • 那一定是区域设置问题,因为我正在另一个国家/地区使用远程 PC。泰。
    猜你喜欢
    • 2017-08-16
    • 2017-11-12
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    相关资源
    最近更新 更多