В BitmapMetadata.DateTaken время смещается на час вперед - C#
Формулировка задачи:
При попытке получить дату снимка из jpg или nef файла, получаю значение на один час больше, чем записано в exif.
Возможно, дело в переходе России на постоянно зимнее время, т.к. для фото, сделанных с 01.01.2012 такого не наблюдается, а вот для всех старых фото смещение на час есть.
Первый вариант кода, которым пытаюсь получить дату:
Второй вариант кода:
Одно из фото, на котором получаю не корректное время, приложил к данному сообщению.
Как получить правильное время из exif?
string dateTaken = null; using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read)) { try { BitmapSource img = BitmapFrame.Create(fs); BitmapMetadata md = (BitmapMetadata) img.Metadata; if (md != null) dateTaken = md.DateTaken; } // ReSharper disable EmptyGeneralCatchClause catch (Exception) {} // ReSharper restore EmptyGeneralCatchClause } DateTime date = dateTaken == null ? File.GetLastWriteTime(fileName) : DateTime.Parse(dateTaken);
FileStream foto = File.Open(fileName, FileMode.Open, FileAccess.Read); BitmapDecoder decoder = JpegBitmapDecoder.Create(foto, BitmapCreateOptions.IgnoreColorProfile, BitmapCacheOption.Default); BitmapMetadata tmpImgExif = (BitmapMetadata)decoder.Frames[0].Metadata.Clone(); DateTime date = Convert.ToDateTime(tmpImgExif.DateTaken);
Решение задачи: «В BitmapMetadata.DateTaken время смещается на час вперед»
textual
Листинг программы
DateTimeOffset dateTime = DateTimeOffset.FromFileTime((((long)time.dwHighDateTime) << 32) + (uint)time.dwLowDateTime);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д