android中的图像/图片/ jpg的日期问题(DATE_TAKEN)

问题描述 投票:2回答:4

我在Stackoverflow链接中通过以下answered question。其代码如下所示。

在这里,我对图像的DATE_TAKEN部分感兴趣。我已经尝试过这个代码,除了日期之外它工作得很好。它在logcat中给出一些数字...例如:'date_taken是2007年11月26日的图像,显​​示Log.i的日期是“1196066358000”。有没有办法将其解析回实际日期格式。

String[] projection = new String[]{
            MediaStore.Images.Media._ID,
            MediaStore.Images.Media.BUCKET_DISPLAY_NAME,
            MediaStore.Images.Media.DATE_TAKEN
    };

    // Get the base URI for the People table in the Contacts content provider.
    Uri images = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;

    // Make the query.
    Cursor cur = managedQuery(images,
            projection, // Which columns to return
            "",         // Which rows to return (all rows)
            null,       // Selection arguments (none)
            ""          // Ordering
            );

    Log.i("ListingImages"," query count="+cur.getCount());

    if (cur.moveToFirst()) {
        String bucket;
        String date;
        int bucketColumn = cur.getColumnIndex(
            MediaStore.Images.Media.BUCKET_DISPLAY_NAME);

        int dateColumn = cur.getColumnIndex(
            MediaStore.Images.Media.DATE_TAKEN);

        do {
            // Get the field values
            bucket = cur.getString(bucketColumn);
            date = cur.getString(dateColumn);

            // Do something with the values.
            Log.i("ListingImages", " bucket=" + bucket 
                   + "  date_taken=" + date);
android image parsing datetime
4个回答
3
投票

阿巴特,

也许你所获得的价值是自纪元以来的UTC毫秒。要将其转换为可读格式,请尝试以下操作:

    Calendar myCal;
    myCal.setTimeInMillis(milliVal);
    Date dateText = new Date(myCal.get(Calendar.YEAR)-1900,
            myCal.get(Calendar.MONTH),
            myCal.get(Calendar.DAY_OF_MONTH),
            myCal.get(Calendar.HOUR_OF_DAY),
            myCal.get(Calendar.MINUTE));
    Log.d("MyApp", "DATE: " + android.text.format.DateFormat.format("MM/dd/yyyy hh:mm", dateText));

2
投票

如果您要阅读MediaStore文档,您会看到DATE_TAKEN被定义为“自1970年1月1日以来以毫秒为单位拍摄图像的日期和时间。”

您可以使用CalendarDate类将此值转换为人类可读的格式。

Integer dateTaken = cursor.getInt(cursor.getColumnIndex(MediaStore.Images.Media.DATE_TAKEN));

Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(dateTaken);
Date date = calendar.getTime();
Log.d("TAG", "Date taken = " + date.toString());

0
投票

如果我没弄错的话,DATE_TAKEN是一个毫秒格式的日期。您应该能够使用Date结构(http://developer.android.com/reference/java/util/Date.html)构造函数来创建一个对象,该对象将毫秒日期解析为您可以使用的内容。


0
投票

我用以下方式解决了这个问题:

int dateindex = resultSet.getColumnIndexOrThrow(MediaStore.Images.Media.DATE_TAKEN);

Date dateText;
dateText = new Date(resultSet.getLong(dateindex));

现在您可以将Date对象转换为人类语言:

SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
datestr = dateFormat.format(dateText);
© www.soinside.com 2019 - 2024. All rights reserved.