我正在编写一个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年的某个时间编写的程序代码,从那时起我就一直在使用它.它的工作非常可靠.
归档时间: |
|
查看次数: |
7652 次 |
最近记录: |