需要帮助来确定问题的位置,无论是java问题还是linux框或其他内容。
我的应用程序在linux weblogic上运行,应用程序在linux上生成某种.tar文件,文件名为datetimestamp。
我正在使用下面的代码片段来获取当前准备文件名的时间:
String dateTimeStamp = new SimpleDateFormat("yyyyMMdd-HHmmss").format(Calendar.getInstance().getTime());
文件格式:SA_PART_YYYYMMDD-HHMMSS_sequence.tar
下面是来自linux box的文件:如果仔细观察,HH(小时)部分在13到12到13到12到14到13之间切换,并且在分钟和秒之间没有重大差异。
我需要了解为什么HH在这里打印错误了?
-rw-rw-rw- 1 med1 temp1 20480 Apr 12 17:45 SA_PART_20180412-134347_6000010739.tar
-rw-rw-rw- 1 med1 temp1 20480 Apr 12 17:45 SA_PART_20180412-134351_6000010740.tar
-rw-rw-rw- 1 med1 temp1 20480 Apr 12 17:45 SA_PART_20180412-124355_6000010741.tar
-rw-rw-rw- 1 med1 temp1 20480 Apr 12 17:45 SA_PART_20180412-124357_6000010742.tar
-rw-rw-rw- 1 med1 temp1 20480 Apr 12 17:47 SA_PART_20180412-134523_6000010743.tar
-rw-rw-rw- 1 med1 temp1 20480 Apr 12 17:47 SA_PART_20180412-134526_6000010744.tar
-rw-rw-rw- 1 med1 temp1 20480 Apr 12 17:47 SA_PART_20180412-124531_6000010745.tar
-rw-rw-rw- 1 med1 temp1 20480 Apr 12 17:47 SA_PART_20180412-124531_6000010746.tar
-rw-rw-rw- 1 med1 temp1 20480 Apr 12 18:17 SA_PART_20180412-141524_6000010747.tar
-rw-rw-rw- 1 med1 temp1 20480 Apr 12 18:17 SA_PART_20180412-141528_6000010748.tar
-rw-rw-rw- 1 med1 temp1 20480 Apr 12 18:17 SA_PART_20180412-131531_6000010749.tar
-rw-rw-rw- 1 med1 temp1 20480 Apr 12 18:17 SA_PART_20180412-131533_6000010750.tar
答案 0 :(得分:1)
很可能是时区问题。 new SimpleDateFormat("yyyyMMdd-HHmmss")
创建一个使用JVM时区设置的SimpleDateFormat
。此设置可以随时从程序的其他部分以及在同一JVM中运行的其他程序进行更改。所以它很脆弱。例如,假设您的程序的两个不同部分需要设置设置并以不同方式设置它。这可以解释。
解决方案是给出明确的时区。现代的方式:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd-HHmmss");
String dateTimeStamp = LocalDateTime.now(ZoneId.of("Pacific/Norfolk")).format(formatter);
或者,如果你不想离开那个已经过时且臭名昭着的SimpleDateFormat
课程,那么:
DateFormat format = new SimpleDateFormat("yyyyMMdd-HHmmss");
format.setTimeZone(TimeZone.getTimeZone("Pacific/Norfolk"));
String dateTimeStamp = format.format(System.currentTimeMillis());
上述两个片段都会给出相同的结果,例如20180413-190318
。在任何一种情况下,请填写我放置太平洋/诺福克所需的时区。