diff options
-rw-r--r-- | media/java/android/media/ExifInterface.java | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/media/java/android/media/ExifInterface.java b/media/java/android/media/ExifInterface.java index 9db35fc..aa5d43a 100644 --- a/media/java/android/media/ExifInterface.java +++ b/media/java/android/media/ExifInterface.java @@ -59,6 +59,11 @@ public class ExifInterface { public static final String TAG_ISO = "ISOSpeedRatings"; /** + * @hide + */ + public static final String TAG_SUBSECTIME = "SubSecTime"; + + /** * The altitude (in meters) based on the reference in TAG_GPS_ALTITUDE_REF. * Type is rational. */ @@ -346,7 +351,7 @@ public class ExifInterface { } /** - * Returns number of milliseconds since Jan. 1, 1970, midnight. + * Returns number of milliseconds since Jan. 1, 1970, midnight local time. * Returns -1 if the date time information if not available. * @hide */ @@ -356,9 +361,24 @@ public class ExifInterface { ParsePosition pos = new ParsePosition(0); try { + // The exif field is in local time. Parsing it as if it is UTC will yield time + // since 1/1/1970 local time Date datetime = sFormatter.parse(dateTimeString, pos); if (datetime == null) return -1; - return datetime.getTime(); + long msecs = datetime.getTime(); + + String subSecs = mAttributes.get(TAG_SUBSECTIME); + if (subSecs != null) { + try { + long sub = Long.valueOf(subSecs); + while (sub > 1000) { + sub /= 10; + } + msecs += sub; + } catch (NumberFormatException e) { + } + } + return msecs; } catch (IllegalArgumentException ex) { return -1; } @@ -375,7 +395,6 @@ public class ExifInterface { if (date == null || time == null) return -1; String dateTimeString = date + ' ' + time; - if (dateTimeString == null) return -1; ParsePosition pos = new ParsePosition(0); try { |