如何解析EXIF日期时间数据

Ton*_*ile 6 c# datetime exif

我正在编写一个C#程序,它从JPEG文件中提取EXIF DateTimeOriginal字段,如果该属性在数据中,我需要将其解析为一个DateTime值.我的代码是:

BitmapFrame src = decoder.Frames[ 0 ];

if ( src.Metadata != null ) {
    BitmapMetadata metaData = (BitmapMetadata) src.Metadata;

    if ( metaData.ContainsQuery( "/app1/{ushort=0}/{ushort=34665}/{ushort=36867}" ) ) {
        object o = metaData.GetQuery( "/app1/{ushort=0}/{ushort=34665}/{ushort=36867}" );

        if ( o != null && o is string ) {
            string originalDate = Convert.ToString( o );

            if ( originalDate != null ) {
                if ( !DateTime.TryParseExact( originalDate.Trim(), "yyyy:MM:dd hh:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out createDate ) ) {
                    // Sets createDate to a default value if the date doesn't parse.
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,调用中的格式字符串TryParseExact不起作用,因为代码执行用注释替换的代码.

编写格式字符串的正确方法是什么?DateTimeOriginal属性中的值格式为YYYY:MMY:DD HH:MM:SS.它是YYYY,MM和DD说明符之间的冒号,它们正在杀死我.他们为什么要用冒号?

编辑

我尝试将格式说明符字符串更改为"yyyy \:MM\dd hh \:mm:\ ss",但这也不起作用.

Mar*_*ann 11

这是一个来自我周围的程序的代码片段,它做了与此类似的事情:

string dateTakenText;
using (Image photo = Image.FromFile(file.Name))
{
    PropertyItem pi = photo.GetPropertyItem(Program.propertyTagExifDTOrig_);
    ASCIIEncoding enc = new ASCIIEncoding();
    dateTakenText = enc.GetString(pi.Value, 0, pi.Len - 1);
}
if (string.IsNullOrEmpty(dateTakenText))
{
    continue;
}
DateTime dateTaken;
if (!DateTime.TryParseExact(dateTakenText, "yyyy:MM:dd HH:mm:ss",
    CultureInfo.CurrentCulture, DateTimeStyles.None, out dateTaken))
{
    continue;
}
Run Code Online (Sandbox Code Playgroud)

此代码段位于foreach循环内,解释了continue关键字的使用.

这是我在2002年或2003年的某个时间编写的程序代码,从那时起我就一直在使用它.它的工作非常可靠.