дата проблемы (DATE_TAKEN) для изображений / изображений / JPG в Android - PullRequest
2 голосов
/ 17 марта 2011

У меня есть ответ на следующий ответ на вопрос в ссылке Stackoverflow. который имеет эти коды, как показано ниже.

Здесь меня интересует DATE_TAKEN-часть изображения. Я пробовал этот код, и он работает отлично, за исключением даты. Он выдает некоторые числа в logcat ... Например, для изображения, чья дата_taken - 26 ноября 2007 года, указанная дата 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 ]

3 голосов
/ 17 марта 2011

Abat,

Возможно, это значение, которое вы получаете в миллисекундах 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 голосов
/ 13 мая 2015

Если бы вы прочитали документацию MediaStore, вы бы увидели, что DATE_TAKEN определяется как «Дата и время, когда изображение было снято в единицах миллисекунд с 1 января 1970 года».

Вы можете преобразовать это значение в удобочитаемый формат, используя классы Calendar и Date.

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 голосов
/ 14 сентября 2018

Я решил проблему следующим образом:

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);
0 голосов
/ 17 марта 2011

Если я не ошибаюсь, DATE_TAKEN - это дата в миллисекундном формате.Вы должны быть в состоянии использовать конструктор структуры Date (http://developer.android.com/reference/java/util/Date.html), чтобы создать объект, который анализирует дату в миллисекундах в то, с чем вы можете работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...