Группа наших файлов миграции sql названа в соответствии с соглашением «V201801011200__migration.sql», и мне было поручено написать java-метод для выбора последней миграции. Я хочу сделать это, проанализировав «201801011200» в Java Datetime (или другом подобном объекте, если формат этой строки не поддерживается Datetime).
Как бы я это сделал? Обратите внимание, что я не могу переименовать эти файлы миграции в «2018-01-01-12: 00» и т. д.
То есть при условии, что все они пронумерованы одинаково.
Зачем вам нужно анализировать дату, чтобы найти последнюю? В данном формате (yyyyMMddHHmm) сам текст упорядочен так же, как даты, т.е. более поздняя дата является более поздним алфавитным текстом. Так что просто найдите файл с последним алфавитным именем. Разбор даты - это излишне.
Помимо простой сортировки имен файлов, есть пара опций: (1) Разобрать LocalDateTime с помощью DateTimeFormatter.ofPattern("'V'uuuuMMddHHmm__'migration.sql'"). (2) Выберите дату и время из имени файла с помощью регулярного выражения, а затем выполните синтаксический анализ с помощью средства форматирования даты и времени, которое не включает V и migration.sql.




Простая строка-время будет:
String timeString = "201801011200";
SimpleDateFormat timeStringFormat = new SimpleDateFormat( "yyyyMMddHHmm" ) ;
Date time = timeStringFormat.parse(timeString);
System.out.println(time) ;
Пожалуйста, не учите молодых пользоваться SimpleDateFormat. Этот класс не только давно устарел, но и доставляет немало хлопот. Сегодня у нас намного лучше java.time, современный API даты и времени Java и его класс DateTimeFormatter.
Не все используют Java 8 или новейшие технологии :)
Верно, @Marvin. Для Java 6 и 7 используйте ThreeTen Backport, он предлагает функциональность java.time. Если вы хотите представить решение для Java 5, прекрасно, но, пожалуйста, сообщите нам, что это именно то, что есть, чтобы никто не подумал, что это решение, которое они должны использовать с более современными версиями Java. Пожалуйста.
If you need java Date object use SimpleDateFormat:
SimpleDateFormat inputFormat = new SimpleDateFormat("yyyyMMddHHmm");
SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd-HH:mm");
java.util.Date javaDate = inputFormat.parse("201801011200");
System.out.println("java.util.Date = " + javaDate);
System.out.println("output string = " + outputFormat.format(javaDate));
Если вам нужно просто переформатировать строку, используйте StringBuilder
String outputString = new StringBuilder("201801011200").
insert(4, "-").
insert(7, "-").
insert(10, "-").
insert(13, ":").toString();
System.out.println("output string = " +outputString);
Пожалуйста, не учите молодых пользоваться SimpleDateFormat. Этот класс не только давно устарел, но и доставляет немало хлопот. Сегодня у нас намного лучше java.time, современный API даты и времени Java и его класс DateTimeFormatter.
Он по-прежнему хорошо работает, если вы знаете, что такое java.util.Date и как с ним правильно работать. Итак ... где твой ответ?
Отсутствие дефисов или двоеточий не означает, что они не отформатированы. Они просто отформатированы без дефисов и двоеточий.