【问题标题】:lastModified() one hour behindlastModified() 晚一小时
【发布时间】:2012-06-12 01:47:37
【问题描述】:

我正在编写一个根据特定时间选择图像的程序。我将每个图像的名称以及它的最后修改时间存储在一个目录中以引用每个图像。但是,在存储每个图像的最后修改日期时,由于某种原因,它似乎落后了一个小时。这意味着将选择一小时后的图像。

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。

【问题讨论】:

  • 你在暑假吗?时间正在从系统中取出,因此除非您的时钟延迟,否则它不应该发生
  • 是的,我的系统已针对夏令时进行了调整。
  • 我刚刚通过专门选择图像并解析其上次修改时间进行检查,如下所示,当通过资源管理器检查时,它仍然会导致实际上次修改时间前一小时。我不知道为什么。有什么办法可以在解析时间上增加一个小时?
  • 试试这个格式,看看 tz 是否符合你的期望:"dd-MM-yyyy HH:mm, zzzz"
  • 看起来 windows 和 java 在您的管辖范围内有不同的夏令时规则。其中一个可能已经过时了吗?

标签: java date time last-modified


【解决方案1】:

File.lastModified() 从纪元(格林威治标准时间 00:00:00,1970 年 1 月 1 日)开始以毫秒为单位运行。注意 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)

【讨论】:

    【解决方案2】:

    我仍然不知道原因,但我设法通过手动将一小时添加到所有时间来修复我的程序。这不是我想要解决此问题的方法,但现在它可以解决!

    解决问题的代码如下所示

        Calendar gc = new GregorianCalendar();
        gc.setTime(fDate);
        gc.add(Calendar.HOUR, 1);
        java.util.Date d2 =  gc.getTime();
    

    谢谢:)

    【讨论】:

    • 这应该永远已经完成了,因为当时钟再次改变时,您的代码将提前一个小时,因此再次中断。
    猜你喜欢
    • 2011-12-07
    • 1970-01-01
    • 2021-12-21
    • 2015-11-29
    • 1970-01-01
    • 2011-04-22
    • 2021-08-18
    • 2013-04-24
    • 2011-10-27
    相关资源
    最近更新 更多