MediaStore - 修改日期无法正常工作
MediaStore - date modified don't work correctly
我从媒体存储中检索了以下值
MediaStore.Images.Media.DATE_TAKEN
MediaStore.Images.Media.DATE_MODIFIED
并从结果中读取日期,如下所示:
int dateTakenColumn = cursor.getColumnIndex(MediaStore.Images.Media.DATE_TAKEN);
int dateModifiedColumn = cursor.getColumnIndex(MediaStore.Images.Media.DATE_MODIFIED);
String dateToken = cursor.getString(dateTakenColumn);
String dateModified = cursor.getString(dateModifiedColumn);
long lDateToken = dateToken != null ? Long.parseLong(dateToken) : 0;
long lDateModified = dateModified != null ? Long.parseLong(dateModified) : 0;
并且可以看到以下行为(示例值):
lDateToken
如下所示:1450696995000 <= CORRECT
lDateModified
如下所示:1450696995 <= WRONG
好像修改日期都被截断了。我用文件浏览器检查了真实文件的最后修改日期,值应该没问题,但我的媒体文件总是得到这么短的数字。
关于为什么会发生这种情况有什么想法吗?
PS:检查了这个http://developer.android.com/reference/android/provider/MediaStore.Images.ImageColumns.html,但是修改的字段没有列在那里...
DATE_TAKEN
是自 1970 年以来的毫秒数。
见 docs
DATE_MODIFIED
是从 1970 年开始的秒数,所以乘以 1000 就可以了。
参见 docs
只需乘以 1000 即可得到正确的日期
fun convertLongToDate(time: Long): String =
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
DateTimeFormatter.ofPattern("dd MMMM yyyy").format(
Instant.ofEpochMilli(time*1000)
.atZone(ZoneId.systemDefault())
.toLocalDate())
} else {
SimpleDateFormat("dd MMMM yyyy").format(
Date(time * 1000)
)
}
我从媒体存储中检索了以下值
MediaStore.Images.Media.DATE_TAKEN
MediaStore.Images.Media.DATE_MODIFIED
并从结果中读取日期,如下所示:
int dateTakenColumn = cursor.getColumnIndex(MediaStore.Images.Media.DATE_TAKEN);
int dateModifiedColumn = cursor.getColumnIndex(MediaStore.Images.Media.DATE_MODIFIED);
String dateToken = cursor.getString(dateTakenColumn);
String dateModified = cursor.getString(dateModifiedColumn);
long lDateToken = dateToken != null ? Long.parseLong(dateToken) : 0;
long lDateModified = dateModified != null ? Long.parseLong(dateModified) : 0;
并且可以看到以下行为(示例值):
lDateToken
如下所示:1450696995000 <= CORRECTlDateModified
如下所示:1450696995 <= WRONG
好像修改日期都被截断了。我用文件浏览器检查了真实文件的最后修改日期,值应该没问题,但我的媒体文件总是得到这么短的数字。
关于为什么会发生这种情况有什么想法吗?
PS:检查了这个http://developer.android.com/reference/android/provider/MediaStore.Images.ImageColumns.html,但是修改的字段没有列在那里...
DATE_TAKEN
是自 1970 年以来的毫秒数。
见 docs
DATE_MODIFIED
是从 1970 年开始的秒数,所以乘以 1000 就可以了。
参见 docs
只需乘以 1000 即可得到正确的日期
fun convertLongToDate(time: Long): String =
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
DateTimeFormatter.ofPattern("dd MMMM yyyy").format(
Instant.ofEpochMilli(time*1000)
.atZone(ZoneId.systemDefault())
.toLocalDate())
} else {
SimpleDateFormat("dd MMMM yyyy").format(
Date(time * 1000)
)
}