Преобразовать строку в локальную дату - PullRequest
0 голосов
/ 28 января 2019

Я хочу конвертировать 21022019 в 2019-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 ]

0 голосов
/ 28 января 2019

Если вы используете Java 8, вы можете использовать нативную библиотеку Java Time, которая была разработана тем же человеком (Стивеном Колебурном), который создал Joda time.Анализировать и отображать даты в различных форматах довольно просто.

Похоже, ваша главная проблема заключается в том, что вы рассматриваете ожидаемый объект как LocalDateTime, но времени нет.По сути, это приводит к тому, что ваш код пропускает ошибку времени выполнения, в которой говорится, что вам нужно включить время, поэтому вы должны использовать LocalDate.

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));
    }
}

Если вам нужно использовать версию Java до 1.8, выможно использовать следующее.Это очень похоже.

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));
    }
}
0 голосов
/ 28 января 2019

Кажется 21022019 2019 год, февраль, 21-й день, попробуйте:

return LocalDate.parse(date, DateTimeFormat.forPattern("ddMMyyyy"))
0 голосов
/ 28 января 2019

Вы можете использовать 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

0 голосов
/ 28 января 2019

Вы должны использовать другой шаблон для анализа даты ввода

   public static void main(String[] args) {

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

    static LocalDate convert(String date) {
        return LocalDate.parse(date, DateTimeFormat.forPattern("ddMMyyyy"));
    }
...