Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字符串到LocalDate_Java_Jodatime - Fatal编程技术网

Java 字符串到LocalDate

Java 字符串到LocalDate,java,jodatime,Java,Jodatime,如何将字符串转换为LocalDate 我见过这样的例子: LocalDate dt = new LocalDate("2005-11-12"); 但我的字符串是: 2005-nov-12 您可能需要从DateTime转到LocalDate 使用Joda时间: DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("yyyy-MMM-dd"); DateTime dateTime = FORMATTER.parseDateTime("2

如何将字符串转换为
LocalDate

我见过这样的例子:

LocalDate dt = new LocalDate("2005-11-12");
但我的字符串是:

2005-nov-12

您可能需要从DateTime转到LocalDate

使用Joda时间:

DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("yyyy-MMM-dd");
DateTime dateTime = FORMATTER.parseDateTime("2005-nov-12");
LocalDate localDate = dateTime.toLocalDate();

使用Joda Time时,应使用
DateTimeFormatter

final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MMM-dd");
final LocalDate dt = dtf.parseLocalDate(yourinput);


如果使用Java 8或更高版本,请参阅
org.joda.time.format.DateTimeFormatter类执行日期时间格式化。三个类提供了创建格式化程序的工厂方法,这是一个。其他的是
ISODateTimeFormat
DateTimeFormatterBuilder

DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MMM-dd");
LocalDate lDate = new LocalDate().parse("2005-nov-12",format);
final org.joda.time.LocalDate类
是一个不可变的datetime类,表示没有时区的日期
LocalDate
是线程安全且不可变的,前提是年表也是。提供的所有标准编年史类都是线程安全且不可变的

java.time 由于Java1.8,您可以通过使用类来实现这一点,而无需额外的库。看


但是语法几乎相同。

DateTimeFormatter
具有内置格式,可直接用于解析字符序列。它区分大小写,Nov将工作,但Nov和 不起作用:

DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MMM-dd");

try {
    LocalDate datetime = LocalDate.parse(oldDate, pattern);
    System.out.println(datetime); 
} catch (DateTimeParseException e) {
    // DateTimeParseException - Text '2019-nov-12' could not be parsed at index 5
    // Exception handling message/mechanism/logging as per company standard
}
DateTimeFormatterBuilder
提供了创建格式化程序的自定义方法。它不区分大小写,Nov、Nov和Nov将被视为相同

DateTimeFormatter f = new DateTimeFormatterBuilder().parseCaseInsensitive()
        .append(DateTimeFormatter.ofPattern("yyyy-MMM-dd")).toFormatter();
try {
    LocalDate datetime = LocalDate.parse(oldDate, f);
    System.out.println(datetime); // 2019-11-12
} catch (DateTimeParseException e) {
     // Exception handling message/mechanism/logging as per company standard
}

还提交了“yyyy MMM dd”格式的编辑。YYYY是纪年,(更离奇的是)DD是一年中的一天。答案稍有错误。。。对于joda time,要使用的类是DateTimeFormat,而不是DateTimeFormatter。换句话说,调用模式的DateTimeFormat(“yyyy-MM-dd”).parseLocalDate(您的输入);java.time.format.DateTimeParseException:无法在索引5处解析文本“2005-nov-12”。发生这种情况是因为您的默认区域设置要求“nov”的“N”为大写。有关此方法的详细讨论,请参阅类似问题。欢迎使用此方法,我们感谢您的输入!请编辑您的答案,并提供更多的解释,它与问题的关系如何,您的解决方案来自何处,为什么有效?有关更多指导,请注意,这个答案是指Joda,而不是JavaSE。
DateTimeFormatter f = new DateTimeFormatterBuilder().parseCaseInsensitive()
        .append(DateTimeFormatter.ofPattern("yyyy-MMM-dd")).toFormatter();
try {
    LocalDate datetime = LocalDate.parse(oldDate, f);
    System.out.println(datetime); // 2019-11-12
} catch (DateTimeParseException e) {
     // Exception handling message/mechanism/logging as per company standard
}