Java SimpleDateFormat возвращает часть времени на окнах
Я пытаюсь узнать текущее время и добавить его к имени файла, который я генерирую.
фрагмент кода:
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(app.values.getProperty("yyyy-MM-dd"));
LocalDateTime now = LocalDateTime.now();
String date = dtf.format(now);
Date today = Calendar.getInstance().getTime();
SimpleDateFormat timeFormat = new SimpleDateFormat("hh:mm");
String time = timeFormat.format(today);
FileOutputStream fs = new FileOutputStream("receipt/Receipt_" + date + "_"+time+".pdf");
Это прекрасно работает на Linux (возвращает "Receipt_2018-04-18_11:13" для имени файла), но когда я запускаю JAR на Windows 7, он только дает
Receipt_2018-04-18_11
и сгенерированный файл поврежден и пуст. Как я могу это исправить?
3 ответа
SimpleDateFormat timeFormat = new SimpleDateFormat("hh:mm");
String time = timeFormat.format(today);
FileOutputStream fs = new FileOutputStream("receipt/Receipt_" + date + "_"+time+".pdf");
:
является недопустимым символом файла (по крайней мере, под Windows, возможно, другими).
Для получения дополнительной информации ознакомьтесь с именами файлов, путей и пространств имен, он содержит список недопустимых символов имени файла / каталога
Может быть, изменить его на -
, например
SimpleDateFormat timeFormat = new SimpleDateFormat("hh-mm");
String time = timeFormat.format(today);
FileOutputStream fs = new FileOutputStream("receipt/Receipt_" + date + "_"+time+".pdf");
или использовать SimpleDateFormat timeFormat = new SimpleDateFormat("hhmm");
вместо
Обновить
Так что, по-видимому, для решения некоторых проблем недостаточно решить проблему.
java.util.Date
классы обычно считаются устаревшими, и вместо этого вы должны использовать более новые (и улучшенные) java.time
API вместо этого, например...
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd_hh-mm");
FileOutputStream fs = new FileOutputStream("receipt/Receipt_" + formatter.format(LocalDateTime.now()) + ".pdf");
Или, если вы не можете (используйте Java 8+), одну из многих доступных библиотек, включая задний порт для java.time
Проблема в том, что ":" является неправильным символом для имен файлов в ОС Windows, поэтому его необходимо заменить. В основном ваш код чрезмерен, вам не нужно Calendar
поскольку LocalDateTime
уже есть часть метки времени.
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd_hh_mm");
LocalDateTime now = LocalDateTime.now();
String dateTime = dtf.format(now);
FileOutputStream fs = new FileOutputStream("receipt/Receipt_" + dateTime + ".pdf");
Надеюсь, поможет!
Попробуйте это, я думаю, это будет работать с вами
Для java.util.Date, просто создайте новую дату ()
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); Date date = new Date(); System.out.println(dateFormat.format(date));