我正在使用以下方法在我的Android应用程序中创建文件:
FileOutputStream fos = context.openFileOutput(fileName, Context.MODE_PRIVATE);
fos.write(data);
fos.flush();
fos.close();
后来我正在尝试进行一些清理,所以我将上次修改日期与某个阈值进行比较,但比较显示该文件的最后修改日期是明天某个时间。请记住,当我明天说,这是相对于今天(文件修改日期)...无论哪一天,你可能正在读这个。
所以基本上,如果我今天创建文件,并检查文件的最后修改日期,它说明天它最后一次修改。
这是Java正在做的事情,还是Android,或者我正在做的事情?
答案 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上。