在 C# 中将日期写入图像元数据时出错-字符串未被识别为有效的日期时间
Error while writing Date to Image MetaData in C#-String was not recognized as a valid DateTime
我尝试使用以下方法将元数据写入图像 code.But 当我尝试添加日期字段时抛出错误 String was not recognized as a valid DateTime
using (Stream bitmapStream = File.Open(fileName, FileMode.Open,
这里的Date是从DatePicker中获取的值
date.tostring()->29/01/2015 06:35:13 下午
date.ToShortDateString()-> 29/01/2015
Stack Trace:
A first chance exception of type 'System.FormatException' occurred in mscorlib.dll
at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)
at System.Convert.ToDateTime(String value, IFormatProvider provider)
at System.Windows.Media.Imaging.BitmapMetadata.set_DateTaken(String value)
at myprogram.Main.worker_DoWork(Object sender, DoWorkEventArgs e)
根据异常和 example in the documentation,我怀疑您需要将其格式化为 US 短日期。最简单的方法可能就是使用不变文化。例如:
metadata.DateTaken = date.ToString("d", CultureInfo.InvariantCulture)
(坦率地说,很遗憾它是一个字符串 属性 而不是 DateTime
,但是我们开始了...)
我注意到这个字段应该可以支持小时、分钟和秒。目前这段代码对我有用。
metadata.DateTaken = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
作为参考,我没有指定 IFormatProvider
,尽管我的语言环境是 en-GB。
System.FormatException
来自对 DateTaken property 的赋值,尽管我们在 Microsoft 的霸主还没有下令记录它想要采用的格式。希望它下面是 locale-invariant.
这样做,日期就正确地存储在元数据中,并且可以像您在 Windows 中预期的那样访问。
有趣的是,当您设置 属性 时,它需要特定的格式 "yyyy/MM/dd HH:mm:ss",但是当您设置它时,格式是系统当前的格式。
我尝试使用以下方法将元数据写入图像 code.But 当我尝试添加日期字段时抛出错误 String was not recognized as a valid DateTime
using (Stream bitmapStream = File.Open(fileName, FileMode.Open,
这里的Date是从DatePicker中获取的值
date.tostring()->29/01/2015 06:35:13 下午
date.ToShortDateString()-> 29/01/2015
Stack Trace:
A first chance exception of type 'System.FormatException' occurred in mscorlib.dll
at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)
at System.Convert.ToDateTime(String value, IFormatProvider provider)
at System.Windows.Media.Imaging.BitmapMetadata.set_DateTaken(String value)
at myprogram.Main.worker_DoWork(Object sender, DoWorkEventArgs e)
根据异常和 example in the documentation,我怀疑您需要将其格式化为 US 短日期。最简单的方法可能就是使用不变文化。例如:
metadata.DateTaken = date.ToString("d", CultureInfo.InvariantCulture)
(坦率地说,很遗憾它是一个字符串 属性 而不是 DateTime
,但是我们开始了...)
我注意到这个字段应该可以支持小时、分钟和秒。目前这段代码对我有用。
metadata.DateTaken = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
作为参考,我没有指定 IFormatProvider
,尽管我的语言环境是 en-GB。
System.FormatException
来自对 DateTaken property 的赋值,尽管我们在 Microsoft 的霸主还没有下令记录它想要采用的格式。希望它下面是 locale-invariant.
这样做,日期就正确地存储在元数据中,并且可以像您在 Windows 中预期的那样访问。
有趣的是,当您设置 属性 时,它需要特定的格式 "yyyy/MM/dd HH:mm:ss",但是当您设置它时,格式是系统当前的格式。