В 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);