Ответ от daggett с использованием регулярных выражений гладкий. Если любопытно, вот время и дата, чтобы справиться с этим.
java.time
xxx_05102019023601017.csv
Я предполагаю, что цифры представляют день месяца, месяц, год, час, минуту, секунду, миллисекунду.
Input
Разбейте строку на подчеркивании, позвонив по номеру String::split
.
String input = "foobar_05102019023601017.csv" ;
String[] parts = string.split( "_" ) ;
String part1 = parts[0]; // foobar
String part2 = parts[1]; // 05102019023601017.csv
Определите форматер для соответствия второй части.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "ddMMuuuuHHmmssSSS'.csv'" ) ;
Анализировать как LocalDateTime
объект, поскольку в вашем входе отсутствует индикатор часового пояса или смещения от UTC.
LocalDateTime ldt = LocalDateTime.parse( part2 , f ) ;
выход
Определите форматер для вывода.
DateTimeFormatter formatterOutput = DateTimeFormatter.ofPattern( "uuuuMMddHHmmssSSS" ) ;
Генерировать вывод.
String datetimeOutput = ldt.format( formatterOutput ) ;
String prefix = part1 + "_" ;
String suffix = ".csv" ;
String output = prefix + datetimeOutput + suffix ;
Или, более кратко, используйте StringBuilder
для однострочного.
String output = new StringBuilder()
.append( part1 )
.append( "_" )
.append( ldt.format( formatterOutput ) )
.append( ".csv")
.toString()
;
ISO 8601
Ваш формат близок к «базовому» варианту стандартного ISO 8601 формата. Я предлагаю использовать эти стандартные форматы везде, где это возможно. Для соответствия вставьте T
между частью года-месяца-дня и частью часа-минуты-секунды.
Для этого измените шаблон DateTimeFormatter
. Вставьте букву внутри пары одинарных кавычек: 'T'
.
DateTimeFormatter formatterOutput = DateTimeFormatter.ofPattern( "uuuuMMdd'T'HHmmssSSS" ) ;
Зона / Смещение
Дата и время без назначенного часового пояса или смещения от UTC неоднозначны и поэтому могут быть неверно истолкованы. Я предлагаю всегда включать зону или смещение, чтобы общаться четко.
Если эти дата и время должны были представлять момент в UTC (в общем, хорошая идея), добавьте просто Z
. Эта буква означает UTC или смещение нуля часов-минут-секунд. Буква произносится как «зулу».
String output = new StringBuilder()
.append( part1 )
.append( "_" )
.append( ldt.format( formatterOutput ) )
.append( "Z" )
.append( ".csv")
.toString()
;