4

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

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

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

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

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

4

4 回答 4

1

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

例如,设备上的时区是否设置为不同于您的本地时间?

于 2010-11-10T01:18:03.917 回答
1

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

我为创建文件创建了一个测试,存储lastModified函数返回的值,并在对手机进行一些操作后再次检查该值(我的设备是Galaxy S)。

我发现lastModified在工作时使用内部缓存,并且可以通过启用/禁用USB模式(如果文件处于打开状态SDCard)来清除此缓存。我还认为这Cache会在一段时间后自动清除。如果缓存已被清除,则该函数读取存储在文件系统中的实际值。

如果您更改设备上的时区并清除,cache那么lastModified函数将返回另一个时间(时差取决于新时区,例如,如果您从 GMT+3 更改为 GMT+4,则时差为 1 小时)。

这个问题是 100% 可重现的。

于 2011-12-02T10:16:58.047 回答
0

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

于 2010-11-10T06:39:35.530 回答
0

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

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

于 2010-11-19T15:40:47.343 回答