3

我想转换210220192019-02-21,但由于某种原因我无法转换。

import org.joda.time.LocalDate;
import org.joda.time.LocalDateTime;
import org.joda.time.format.DateTimeFormat;

public class StringToLocalDate {
    public static void main(String[] args) {
        System.out.println(convert("21022019"));
    }

    static LocalDate convert(String date) {
        LocalDateTime ldt;
        ldt = LocalDateTime.parse(date, DateTimeFormat.forPattern("YYYY-MM-dd"));
        return LocalDateTime.now().toLocalDate();
    }
} 
4

5 回答 5

6

如果您使用的是 Java 8,则可以使用由创建 Joda time 的同一个人 (Stephen Colebourne) 开发的本机 Java Time 库。以各种格式解析和显示日期非常容易。

您的主要问题似乎是您将预期对象视为 a LocalDateTime,但没有时间存在。这本质上是通过运行时错误抛出您的代码,该错误指出您需要包含时间,因此您应该使用 aLocalDate代替。

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

public class StringToLocalDate {
    public static String DATE_FORMAT_INPUT = "ddMMyyyy";
    public static String DATE_FORMAT_OUTPUT = "yyyy-MM-dd";

    public static void main(String[] args) {
        System.out.println(formatted(convert("21022019")));
    }

    public static String formatted(LocalDate date) {
        return date.format(DateTimeFormatter.ofPattern(DATE_FORMAT_OUTPUT));
    }

    public static LocalDate convert(String dateStr) {
        return LocalDate.parse(dateStr, DateTimeFormatter.ofPattern(DATE_FORMAT_INPUT));
    }
}

如果需要使用 1.8 之前的 Java 版本,可以使用以下。它非常相似。

import org.joda.time.LocalDate;
import org.joda.time.format.DateTimeFormat;

public class StringToLocalDate {
    public static String DATE_FORMAT_INPUT = "ddMMyyyy";
    public static String DATE_FORMAT_OUTPUT = "yyyy-MM-dd";

    public static void main(String[] args) {
        System.out.println(formatted(convert("21022019")));
    }

    public static String formatted(LocalDate date) {
        return date.toString(DateTimeFormat.forPattern(DATE_FORMAT_OUTPUT));
    }

    public static LocalDate convert(String dateStr) {
        return LocalDate.parse(dateStr, DateTimeFormat.forPattern(DATE_FORMAT_INPUT));
    }
}
于 2019-01-28T14:42:44.420 回答
5

您应该使用另一种模式来解析输入日期

   public static void main(String[] args) {

        System.out.println(convert("21022019"));
    }

    static LocalDate convert(String date) {
        return LocalDate.parse(date, DateTimeFormat.forPattern("ddMMyyyy"));
    }
于 2019-01-28T14:31:07.963 回答
2

好像21022019是2019年2月21号,试试:</p>

return LocalDate.parse(date, DateTimeFormat.forPattern("ddMMyyyy"))
于 2019-01-28T14:31:23.007 回答
1

您可以使用 SimpleDateFormat,如下所示:

import java.text.*;

...//your class

String pattern = "yyyy-MM-dd";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);

String date = simpleDateFormat.format(new Date());
System.out.println(date);

参考:http ://tutorials.jenkov.com/java-internationalization/simpledateformat.html

于 2019-01-28T14:33:46.123 回答
0

100% 工作代码

   LocalDate localDate = LocalDate.parse("Wed, 21 Jan 2021 10:24 AM", DateTimeFormatter.ofPattern("EE, d MMM yyyy hh:mm a"));
于 2021-01-20T10:01:57.480 回答