为什么Java(Android?)将我的文件的最后修改日期设置为明天?

时间:2010-11-10 01:14:02

标签: java android last-modified modified-date

我正在使用以下方法在我的Android应用程序中创建文件:

FileOutputStream fos = context.openFileOutput(fileName, Context.MODE_PRIVATE);
fos.write(data);
fos.flush();
fos.close();

后来我正在尝试进行一些清理,所以我将上次修改日期与某个阈值进行比较,但比较显示该文件的最后修改日期是明天某个时间。请记住,当我明天说,这是相对于今天(文件修改日期)...无论哪一天,你可能正在读这个。

所以基本上,如果我今天创建文件,并检查文件的最后修改日期,它说明天它最后一次修改。

这是Java正在做的事情,还是Android,或者我正在做的事情?

4 个答案:

答案 0 :(得分:1)

您的测试设备/模拟器将当前日期和时间显示为什么?听起来他们只是设置不正确。

例如,设备上的时区是否设置为当地时间以外的其他区域?

答案 1 :(得分:1)

我处理类似的问题( lastModified date 有时会更改而不会触及文件)但找不到解决方法。

我为创建文件创建测试, lastModified 函数返回的商店值,并在对手机执行某些操作后再次检查此值(我的设备为Galaxy S)。

我发现 lastModified 在工作时使用内部缓存,可以通过启用/禁用USB模式(如果文件在SDCard上)来清除此缓存。我想也是这个Cache在一段时间后自动清除。如果缓存已被清除,则该函数读取存储在文件系统中的实际值。

如果更改设备上的时区并清除cache,则 lastModified 功能将返回另一个时间(差异取决于新时区,例如,如果您从GMT更改+3到GMT + 4然后差异是1小时)。

此问题100%可重现。

答案 2 :(得分:0)

假设您正在使用java.io.File.lastModified(),以获取最后修改的时间戳,您将获得自1970年1月1日格林尼治标准时间00:00:00以来的毫秒数。时间戳隐含地基于GMT / UTC

答案 3 :(得分:0)

您应该检查手机上可能使用FileOutputStream修改和创建的其他文件(可能您的照片)。如果他们也将明天设置为修改日期,那么我建议您向手机制造商提交错误报告。

我认为这是与手机相关的错误,因为您说这不会发生在您的Nexus One上。