为什么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
在一段时间后自动清除。 如果缓存已被清除,则该函数读取存储在文件系统中的实际值。
如果您更改设备上的时区并清除cache
则lastModified函数将返回另一个时间(差异取决于新时区,例如,如果您从GMT + 3更改为GMT + 4,则差异为1小时)。
这个问题是100%可重复的。
假设您使用的是java.io.File.lastModified()
,以获取最后修改的时间戳,您将获得自1970年1月1日格林尼治标准时间00:00:00以来的毫秒数。时间戳隐式为GMT / UTC根据。
您应该检查手机上可能使用FileOutputStream修改和创建的其他文件( 可能是您的照片)。 如果他们也将明天设置为修改日期,那么我建议您向手机制造商提交错误报告。
我认为这是一个与手机有关的错误,因为你说这不会发生在你的Nexus One上。
- 尝试在AsyncTask中解析的java.lang.StackOverflowError
- 尝试使用fileProvider从assets文件夹打开PDF文件,但它给出FileNotFoundException:没有这样的文件或目录
- Javamail中的FolderClosedexception
- Android DevicePolicyManager lockNow()
- 在Android上传并显示MS Word文档
- 隐藏或删除特定活动的操作栏 Android的
- 以编程方式获取android设备的所有RAM内存,而不仅仅是分配给用户进程的内存
- LibGDX 0.9.9 – 在环境中应用立方体贴图
- 通过ADB命令查询电话