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

时间:2011-03-17 13:08:45

标签: android image parsing datetime

我已经在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);

4 个答案:

答案 0 :(得分: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));

答案 1 :(得分: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());

答案 2 :(得分:0)

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

答案 3 :(得分: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);