【问题标题】:date problem (DATE_TAKEN) for images/pictures/jpg in androidandroid中图像/图片/jpg的日期问题(DATE_TAKEN)
【发布时间】:2011-07-17 09:38:21
【问题描述】:

我在 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


    【解决方案1】:

    阿巴特,

    也许你得到的价值是自纪元以来的 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));
    

    【讨论】:

    • 感谢您的回复。所用日期以毫秒为单位......我的代码中的问题是我使用“String”类型来检索毫秒值。当我将其更改为“长”类型时,一切都变得很好。我使用的代码如下: long longDate = cur.getLong(dateColumn);日期 d = new Date(longDate); java.text.DateFormat formatter = new SimpleDateFormat("MMMM dd, yyyy h:mmaa"); String dateString = formatter.format(d); // 使用简单的日期格式我可以检索到确切的日期
    • 日期总是返回 1970 年 1 月 17 日??有什么帮助吗??
    • @kgandroid cur.getLong(dateColumn) 。如果您检查您是否通过 long 传递值,则一切正常 :)
    【解决方案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());
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        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);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-11-10
          • 1970-01-01
          • 1970-01-01
          • 2011-05-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多