package exif import ( "fmt" "time" "github.com/barasher/go-exiftool" ) type Info struct { CreatedAt *time.Time } var ( CreateDateFormat = "2006:01:02 15:04:05-07:00" ) func Extract(filename string) (*Info, error) { et, err := exiftool.NewExiftool() if err != nil { return nil, err } defer et.Close() var resp *Info = &Info{} fileInfos := et.ExtractMetadata(filename) for _, fileInfo := range fileInfos { if fileInfo.Err != nil { continue } var t time.Time for k, v := range fileInfo.Fields { switch k { case "CreateDate": offset, ok := fileInfo.Fields["OffsetTime"] if !ok { offset = "+00:00" } v := fmt.Sprintf("%s%s", v, offset) t, err = time.Parse(CreateDateFormat, v) case "CreationDate": t, err = time.Parse(CreateDateFormat, fmt.Sprint(v)) default: continue } if err != nil { continue } if resp.CreatedAt == nil || resp.CreatedAt.After(t) { resp.CreatedAt = &t } } } return resp, nil }