Как заботиться о летнем времени при сравнении значений времени в C # - PullRequest
0 голосов
/ 20 марта 2012

У меня есть два времени (как String) для сравнения.Эти значения синхронизации имеют формат, как можно понять из кода ниже:

1-е значение синхронизации:

String fileTime = new FileInfo(fileName).LastWriteTime.ToUniversalTime().ToString("MM/dd/yyyy hh:mm tt");

2-е значение синхронизации: (я беру из списка индийских таймингов, доступных в базе данных)

DateTime date = DateTime.ParseExact(eachBinary.Date, "MM/dd/yyyy hh:mm tt", CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
date = TimeZoneInfo.ConvertTime(date, TimeZoneInfo.FindSystemTimeZoneById("India Standard Time"), TimeZoneInfo.Utc); 
eachBinary.Date = date.ToString("MM/dd/yyyy hh:mm tt");

Как вы можете видеть выше, я хочу сравнить тайминги системных файлов с этимив записях БД.Здесь я вижу потенциальную проблему неравного времени даже после преобразования в UTC и последующего сравнения строк.

Я знаю, что сравниваемые здесь значения времени для файла (скажем, file1 )равны.Но приложение (или) приложение возвращается, поскольку они неравны.

Является ли DST проблемой в моем коде? Если это так, можете ли вы помочь в лечении ТЛЧ при сравнении.

РЕДАКТИРОВАТЬ1:

1-е значение синхронизации = 23.02.2012 09:08 (преобразовано из Тихоокеанской зоны, до преобразования было 23.02.2012, 12:08)

2-е значение синхронизации = 02/23/ 2012 08:08 (до преобразования это было 23.02.2012 13:38)

1 Ответ

1 голос
/ 23 марта 2012

Я думаю, что первое преобразование (fileTime) - это возвращение неправильного значения. Я не в PST, и моя культура использует 24-часовые часы, поэтому мне пришлось смоделировать ваш первый пример кода с помощью следующего кода:

// 02/23/2012 12:08 AM (instead of reading LastWriteTime)
DateTime original = new DateTime(2012, 02, 23, 00, 08, 00);

// instead of ToUniversalTime(), which would use my local time zone
TimeZoneInfo pstzone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
DateTime utc = TimeZoneInfo.ConvertTimeToUtc(original, pstzone); 

// instead of a plain ToString(), which would use my local culture
CultureInfo us = CultureInfo.CreateSpecificCulture("en-US");
String display = utc.ToString("MM/dd/yyyy hh:mm tt", us);

// output: display = 02/23/2012 08:08 AM

Итак, это «работает на моей машине». Я предлагаю вам попробовать это на своей машине. Если это также работает, постепенно заменяйте детали (новый DateTime -> LastWriteTime; ConvertTimeToUtc -> ToUniversalTime и т. Д.) До тех пор, пока не получите исходный однострочный пример. Обратите внимание, на каком этапе произошел сбой преобразования - теперь вы знаете, какая часть отвечает за возврат неправильного результата.

...