Я автоматизирую обработку плоских файлов, полученных с мэйнфрейма, и смущенно создаю и модифицировал время. Файлы создаются на мэйнфрейме, а затем отправляются по электронной почте требуемым лицам. Затем пользователи сохраняют файл по электронной почте (Outlook) и выполняют все, что они делают с ними.Недостаток BasicFileAttributes: какое настоящее время создания?
Для этой автоматизации файл будет обрабатываться автоматически. Мне нужно сообщить пользователю, когда был загружен последний файл, и дать им возможность загрузить более новый файл.
Моя проблема со временем: я получаю дату/время создания, которое позднее последнего времени. Используя этот код:
try {
DateFormat utcFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
DateFormat cstFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
utcFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
cstFormat.setTimeZone(TimeZone.getTimeZone("America/Chicago"));
Path filePath = Paths.get("C:/data/KWJFLTD.XLS");
BasicFileAttributes basicAttr = Files.readAttributes(filePath, BasicFileAttributes.class);
FileTime creationTime = basicAttr.creationTime();
FileTime modifiedTime = basicAttr.lastModifiedTime();
String cTime = creationTime.toString();
String mTime = modifiedTime.toString();
Date dc = utcFormat.parse(cTime);
Date dm = utcFormat.parse(mTime);
cTime = cstFormat.format(dc);
mTime = cstFormat.format(dm);
System.out.println("Creation Time: " + cTime);
System.out.println("Modified Time: " + mTime);
} catch (IOException ex) {
Logger.getLogger(FAULoad.class.getName()).log(Level.SEVERE, null, ex);
} catch (ParseException ex){
Logger.getLogger(FAULoad.class.getName()).log(Level.SEVERE, null, ex);
}
Я получаю этот результат:
Creation Time: 2015-06-24 15:25:12
Modified Time: 2015-06-24 02:28:05
я в конечном итоге со временем создания после последнего изменения времени. Это потому, что время создания изменяется, когда оно сохраняется из электронной почты? В этой ситуации, учитывая, что (теоретически) никаких изменений не происходит с момента ее создания, будет ли последнее измененное время совпадать с датой создания?
Почему у вас есть два разных объекта dateformat? – Mackiavelli
Это просто предположение, но может быть, что время модификации было временем, когда контент в целом был последним изменен, а время создания - это время, когда этот конкретный файл был создан. Если вы копируете файл, время создания (копии) может быть выполнено после времени модификации (содержимого). См. Здесь, например: http://answers.microsoft.com/en-us/windows/forum/windows_xp-files/how-can-the-date-created-be-later-than-the-date/9e625c0d-8694 -4c8e-8a27-3ce74687aa53 – Thomas
@mackivelli: один для UTC, другой - CST ... плюс, я хочу сбросить десятичную часть секунд. –