MediaStore - 修改日期不能正常工作

时间:2015-12-23 19:03:51

标签: android mediastore

我从媒体商店中检索以下值

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,但修改后的字段未列在那里......

2 个答案:

答案 0 :(得分:4)

自1970年以来,

DATE_TAKEN以毫秒为单位。 请参阅docs

DATE_MODIFIED是自1970年以来的秒数,因此只需乘以1000就可以了。 请参阅docs

答案 1 :(得分:0)

只需将其乘以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)
            )
        }