I am writing a C# program that extracts the EXIF DateTimeOriginal
field from a JPEG file, if that property is in the data, and I need to parse it into a DateTime
value.
The code I have is:
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.
}
}
}
}
}
However, the format string in the call to TryParseExact
doesn't work, as the code executes the code that is replaced with the comment.
What's the right way to write the format string? The value in the DateTimeOriginal
property is formatted as YYYY:MM:DD HH:MM:SS. It's the colons in between the YYYY, MM, and DD specifiers that are killing me. Why'd they use colons??
EDIT
I tried changing the format specifier string to "yyyy\:MM\dd hh\:mm:\ss" but that didn't work, either.
Here's a code snippet from an old program I have lying around that does something very similar to this:
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;
}
This code snippet sits inside a foreach
loop, which explains the use of the continue
keyword.
This is code from a program I wrote sometime back in 2002 or 2003, and I've been using it regularly since then; it works pretty reliably.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With