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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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