如何检测 Android 设备是否以秒或毫秒为单位存储媒体日期?

How do I detect if an Android device stores media dates in seconds or milliseconds?

我有一个小问题,不同的 Android 设备返回以秒或毫秒为单位的图像拍摄日期时间戳。我使用 Intent.ACTION_PICK 然后使用内容解析器来查询结果。

我发现 MediaStore.Images.ImageColumns.DATE_TAKEN 列 returns 在 Samsung Galaxy J7 上以秒为单位,但在 Samsung Edge 7 上以毫秒为单位。如何确定设备使用哪一个?

嗯,毫秒会大 1000 倍。并且设备上的所有时间戳都应该是最近的——在过去的几年里。因此,如果该数字高于 100 亿,则为毫秒。如果在下方,则为秒。该测试将在下个世纪左右有效。

当您处理由 Android 设备拍摄的照片时,我们可以假设不会有 2000 年之前的日期。

2000-01-01T00:00Z 的时间戳是 946684800 秒(或 946684800000 毫秒)。因此,如果该值低于 946684800000,那么您可以假设它以秒为单位。

当然你可以更精确,而不是 2000 年,你可以使用 first Android version release, or even discard older versions and consider the last N versions (N can be as arbitrary as you want). Here's the timestamp for the Android versions release dates (all dates based on this link 之后的日期 - 时间设置为午夜,偏移量为 UTC) :

2008-09-23T00:00Z: 1222128000000 milliseconds
2009-02-09T00:00Z: 1234137600000 milliseconds
2009-04-27T00:00Z: 1240790400000 milliseconds
2009-09-15T00:00Z: 1252972800000 milliseconds
2009-10-26T00:00Z: 1256515200000 milliseconds
2010-05-20T00:00Z: 1274313600000 milliseconds
2010-12-06T00:00Z: 1291593600000 milliseconds
2011-02-22T00:00Z: 1298332800000 milliseconds
2011-10-18T00:00Z: 1318896000000 milliseconds
2012-07-09T00:00Z: 1341792000000 milliseconds
2013-10-31T00:00Z: 1383177600000 milliseconds
2014-11-12T00:00Z: 1415750400000 milliseconds
2015-10-23T00:00Z: 1445558400000 milliseconds
2016-08-22T00:00Z: 1471824000000 milliseconds