首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从MediaStore获取视频的添加/修改/拍摄日期

从MediaStore获取视频的添加/修改/拍摄日期
EN

Stack Overflow用户
提问于 2016-10-22 14:59:12
回答 5查看 4.7K关注 0票数 2

从哪里可以从MediaStore获得视频的拍摄日期?我从MediaStore获得了以下字段。

代码语言:javascript
运行
复制
MediaStore.Video.Media.DATE_MODIFIED
MediaStore.Video.Media.DATE_TAKEN
MediaStore.Video.Media.DATE_ADDED

这些字段返回的是适当的默认值-

代码语言:javascript
运行
复制
dateModified: 1477043336
dateTaken: 1477043336000
dateAdded: 1477043352

格式化日期-

代码语言:javascript
运行
复制
dateModified: 01/01/1970
dateTaken: 01/01/1970
dateAdded: 01/01/1970

我检查了股票画廊>随机视频文件,我确实看到了正确的日期。我查看了MediaStore中的视频列,但没有看到任何其他列都有正确的日期。

代码语言:javascript
运行
复制
    SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
    String formattedDate = dateFormat.format(new Date(row.getColumnIndex(MediaStore.Video.Media.DATE_MODIFIED)));

    String dateModified = dateFormat.format(new Date(row.getColumnIndex(MediaStore.Video.Media.DATE_MODIFIED)));
    String dateTaken = dateFormat.format(new Date(row.getColumnIndex(MediaStore.Video.Media.DATE_TAKEN) * 1000L));
    String dateAdded = dateFormat.format(new Date(row.getColumnIndex(MediaStore.Video.Media.DATE_ADDED) * 1000L));

    Log.d(TAG, "dateModified: "+dateModified);
    Log.d(TAG, "dateTaken: "+dateTaken);
    Log.d(TAG, "dateAdded: "+dateAdded);

    Log.d(TAG, "dateModified: "+row.getString(row.getColumnIndex(MediaStore.Video.Media.DATE_MODIFIED)));
    Log.d(TAG, "dateTaken: "+row.getString(row.getColumnIndex(MediaStore.Video.Media.DATE_TAKEN)));
    Log.d(TAG, "dateAdded: "+row.getString(row.getColumnIndex(MediaStore.Video.Media.DATE_ADDED)));
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-10-22 15:18:13

这些字段返回了适当的默认值。

我不知道你的第二个为什么在结尾有三个额外的零。但是,使用Unix数据转换器站点

  • dateModified = 1477043336 =2016年10月21日星期五09:48:56格林尼治标准时间
  • dateAdded = 1477043352 =2016年10月21日星期五09:49:12格林尼治标准时间

没有零的dateTakendateModified是一样的。因此,假设您可以确定您的零来自何处(例如,随机决定将值乘以1000 L),那么您就有了有效的时间戳。

票数 0
EN

Stack Overflow用户

发布于 2020-11-24 08:45:58

代码语言:javascript
运行
复制
//Just multiply it by 1000 to get correct date
     
    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)
                )
            }
票数 3
EN

Stack Overflow用户

发布于 2020-04-18 11:09:07

从接口上的注释来看,DATE_ADDEDDATE_MODIFIED从那个时代开始就被注解为秒,而不是毫秒。然而,自那个时代以来,DATE_TAKEN被注解为毫秒。

注释上的这种差异解释了CommonsWare的答案注释在零上的差异。它还指导使用:

由于日期格式化器通常在millis中期望时间戳,所以应该首先将秒值乘以1000。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40193567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档