Дата в строке в дату в дате преобразования - PullRequest
0 голосов
/ 30 октября 2019

У меня дата в String формате как "2019-10-30 12:17:47". Я хочу преобразовать это в экземпляр Date вместе со временем, чтобы я мог сравнить два объекта даты.

Это то, что я пробовал:

String dateString = "2019-10-30 12:17:47"        //Date in String format
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd  HH-mm-ss");    //sdf
Date d1 = format.parse(dateString);

Но здесьЯ получаю исключение как "Unparseble date исключение".

Пожалуйста, помогите ...

Ответы [ 4 ]

3 голосов
/ 30 октября 2019

Что пошло не так в вашем коде?

В строке шаблона формата, yyyy-MM-dd HH-mm-ss, у вас есть два пробела между датой и временем. Поскольку строка даты 2019-10-30 12:17:47 содержит только один пробел, объект форматирования возбуждает исключение. Это было также то, что Тим Бигелейзен сказал в комментарии. Комментарий deHaar также верен: дефисы между часами, минутами и секундами не совпадают с двоеточиями в строке даты.

Что делать вместо этого?

См. theхороший ответ от deHaar

2 голосов
/ 30 октября 2019

Вы должны действительно переключиться на java.time (как уже предлагалось в одном из комментариев ниже вашего вопроса). Это не сложнее, чем устаревшие временные классы из java.util, но менее подвержено ошибкам и более мощное в отношении смещений, часовых поясов, летнего времени и множества различных календарей, которые есть в мире.

См. Этомаленький пример:

public static void main(String[] args) {
    String dateString = "2019-10-30 12:17:47";
    // define your pattern, should match the one of the String ;-)
    String datePattern = "yyyy-MM-dd HH:mm:ss";

    // parse the datetime using the pattern
    LocalDateTime ldt = LocalDateTime.parse(dateString,
                                            DateTimeFormatter.ofPattern(datePattern));

    // print it using a different (here a built-in) formatting pattern
    System.out.println(ldt.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
    // or you just use the one defined by you
    System.out.println(ldt.format(DateTimeFormatter.ofPattern(datePattern)));
    // or you define another one for the output
    System.out.println(ldt.format(DateTimeFormatter.ofPattern("MMM dd yyyy HH-mm-ss")));
}

Вывод в моей системе выглядит следующим образом:

2019-10-30T12:17:47
2019-10-30 12:17:47
Okt 30 2019 12-17-47
1 голос
/ 30 октября 2019

Дата в строке, которую вы хотите отформатировать, не соответствует форматеру. Подробнее смотрите здесь, https://docs.oracle.com/javase/tutorial/i18n/format/simpleDateFormat.html

@Test
public void test2() {
    String dateString = "2019-10-30 12:17:47";        //Date in String format
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    //sdf
    try {
        Date d1 = format.parse(dateString);
    } catch (ParseException e) {
        e.printStackTrace();
    }
}
0 голосов
/ 30 октября 2019

Есть два способа сделать это

первый - ваш путь

    String dateString = "2019-10-30 12:17:47"; // Date in String format
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // sdf
    Date d1 = format.parse(dateString

второй - мой путь (местная дата)

    LocalDate resultDate = dateFormat("2019-10-30 12:17:47");
    System.out.println(resultDate);
  public static LocalDate dateFormat(String textTypeDateTime) {

    final DateTimeFormatter dateTimetextFormatter =
        DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    return LocalDate.parse(textTypeDateTime, dateTimetextFormatter);
  }
...