在 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",但是当您设置它时,格式是系统当前的格式。