我正在编写一个程序,根据特定时间选择图像。我将每个图像的名称存储在目录中以及其最后修改时间以引用每个图像。但是,当存储每个图像的最后修改日期时,由于某种原因,它似乎落后于小时。这意味着一小时后的图像将被选中。
System.out.println(listOfFiles[i].getName());
originalImageNames.add(listOfFiles[i].getAbsolutePath());
date = listOfFiles[i].lastModified();
Date fDate = new Date(date);
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm");
String dateString = sdf.format(fDate);
System.out.println(dateString);
originalImageDates.add(dateString);
正在打印正确的图像名称,但此图像的上次修改时间为10:29。但是,打印和存储的图像日期是09:29。
答案 0 :(得分:1)
File.lastModified()以纪元(1970年1月1日格林威治标准时间00:00:00)测量的msecs运行。注意GMT时区。 SimpleDateFormat补偿您的本地时区;所以如果你离格林威治标准时间一小时就可以解释它。
http://docs.oracle.com/javase/7/docs/api/java/io/File.html#lastModified() http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html#format(java.util.Date,java.lang.StringBuffer,java.text.FieldPosition)
答案 1 :(得分:-2)
我仍然不知道原因,但我设法通过手动添加一小时来修复我的程序。这不是我想解决这个问题的方法,但此时它会做到!
解决问题的代码如下所示
Calendar gc = new GregorianCalendar();
gc.setTime(fDate);
gc.add(Calendar.HOUR, 1);
java.util.Date d2 = gc.getTime();
谢谢:)