@@ -172,41 +172,21 @@ func readDateTime(x *exif.Exif, dateTag exif.FieldName, subSecTag exif.FieldName
172
172
if err == nil {
173
173
subSec += "000"
174
174
date = date + "." + subSec [:3 ]
175
- return time .ParseInLocation ("2006:01:02 15:04:05.000" , date , local )
176
175
}
177
- return time . ParseInLocation ( "2006:01:02 15:04:05" , date , local )
176
+ return parseExifTime ( date , local )
178
177
}
179
178
180
- /*
181
- // readGPSTimeStamp extract the date from the GPS data
182
-
183
- func readGPSTimeStamp(x *exif.Exif, _ *time.Location) (time.Time, error) {
184
- tag, err := getTagSting(x, exif.GPSDateStamp)
185
- if err == nil {
186
- var tags *tiff.Tag
187
- tags, err = x.Get(exif.GPSTimeStamp)
188
- if err == nil {
189
- tag = tag + " " + fmt.Sprintf("%02d:%02d:%02dZ", ratToInt(tags, 0), ratToInt(tags, 1), ratToInt(tags, 2))
190
- t, err := time.ParseInLocation("2006:01:02 15:04:05Z", tag, time.UTC)
191
- if err == nil {
192
- return t, nil
193
- }
194
- }
195
- }
196
- return time.Time{}, err
179
+ func parseExifTime (date string , local * time.Location ) (time.Time , error ) {
180
+ var year , month , day , hour , min , sec , milli int
181
+ date = strings .ReplaceAll (date , "-" , ":" )
182
+ date = strings .ReplaceAll (date , "/" , ":" )
183
+ fmt .Sscanf (date , "%d:%d:%d %d:%d:%d.%d" , & year , & month , & day , & hour , & min , & sec , & milli )
184
+ if year < 1900 || month == 0 || day == 0 {
185
+ return time.Time {}, fmt .Errorf ("invalid date format" )
197
186
}
198
-
199
- func ratToInt(t *tiff.Tag, i int) int {
200
- n, d, err := t.Rat2(i)
201
- if err != nil {
202
- return 0
203
- }
204
- if d == 1 {
205
- return int(n)
206
- }
207
- return int(float64(n) / float64(d))
208
- }
209
- */
187
+ d := time .Date (year , time .Month (month ), day , hour , min , sec , milli * int (time .Millisecond ), local )
188
+ return d , nil
189
+ }
210
190
211
191
func getTagSting (x * exif.Exif , tagName exif.FieldName ) (string , error ) {
212
192
t , err := x .Get (tagName )
0 commit comments