java SimpleDateFormat returns 部分时间 windows
java SimpleDateFormat returns a part of the time on windows
我正在尝试获取当前时间并将其附加到我生成的文件的名称中。
代码段:
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 上工作正常(returns "Receipt_2018-04-18_11:13" 作为文件名)但是当我 运行 windows 7 上的 jar 时,它只给出
Receipt_2018-04-18_11
并且生成的文件已损坏且为空。我该如何解决这个问题?
SimpleDateFormat timeFormat = new SimpleDateFormat("hh:mm");
String time = timeFormat.format(today);
FileOutputStream fs = new FileOutputStream("receipt/Receipt_" + date + "_"+time+".pdf");
:
是一个非法文件字符(至少在 Windows 下,可能是其他字符)。
有关详细信息,请查看 Naming Files, Paths, and Namespaces,其中包含无效的 file/directory 名称字符列表
也许可以改成-
,例如
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 OS 上文件名的不正确字符,因此需要替换它。基本上你的代码太多了,你不需要 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,只需创建一个新的 Date()
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); Date date = new Date(); System.out.println(dateFormat.format(date));
我正在尝试获取当前时间并将其附加到我生成的文件的名称中。
代码段:
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 上工作正常(returns "Receipt_2018-04-18_11:13" 作为文件名)但是当我 运行 windows 7 上的 jar 时,它只给出
Receipt_2018-04-18_11
并且生成的文件已损坏且为空。我该如何解决这个问题?
SimpleDateFormat timeFormat = new SimpleDateFormat("hh:mm");
String time = timeFormat.format(today);
FileOutputStream fs = new FileOutputStream("receipt/Receipt_" + date + "_"+time+".pdf");
:
是一个非法文件字符(至少在 Windows 下,可能是其他字符)。
有关详细信息,请查看 Naming Files, Paths, and Namespaces,其中包含无效的 file/directory 名称字符列表
也许可以改成-
,例如
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 OS 上文件名的不正确字符,因此需要替换它。基本上你的代码太多了,你不需要 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,只需创建一个新的 Date()
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); Date date = new Date(); System.out.println(dateFormat.format(date));