У меня есть приложение, которое записывает статистику. Когда пользователь отправляет свою статистику, информация сохраняется, а дата / время записывается как UTC, например,
В Великобритании, если бы я записал цифры в 03/08/2010 10:30
, моя записанная дата / время были бы 03/08/2010 09:30
, поскольку в настоящее время мы наблюдаем летнее время.
Если бы я был в Австралии, например, и в то же время я записывал свою статистику, моя записанная дата / время были бы 02/08/2010 23:30
, так как я думаю, что они на 10 часов впереди.
Мое приложение должно генерировать статистический отчет в 7 утра каждое утро (по местному времени) для всех. Поэтому, когда он запускается, он делает что-то вроде этого:
var currentUtc = DateTime.UtcNow.AddDays(-1); // UTC date/time 24 hours from current
Эта дата (время игнорируется) затем используется для получения статистики из базы данных. Теперь это работает нормально для Великобритании. Это другие международные страны, я нахожу проблемы. В частности, Австралия.
У меня проблема с Австралией, которая на 10 часов вперед, поэтому мое приложение запускается примерно в 03/08/2010 22:00
по британскому времени для генерации отчета по 04/08/2010 07:00
по австралийскому времени. Так что происходит что-то вроде:
// the date/time at this point would be 03/08/2010 22:00 (UTC 03/08/2010 21:00)
var currentUtc = DateTime.UtcNow.AddDays(-1);
// so currentUtc is set to 02/08/2010 22:00 (which makes sense for UK, but not for Aussie)
Если вышеупомянутое было отчетом для кого-то в Великобритании, это означает, что он получит отчет за 02/08/2010 от 03.08.2010, который является правильным. Однако для Австралии (так как они на 10 часов вперед) это означает, что они получат отчет за 08/08/2010 от 04.08.2010, который будет на 2 дня позже.
Что должно произойти, когда мое приложение запускается в 22:00 часов 03.08.2010, оно должно генерировать отчет по Австралии, равный для 03.08.2010. Однако согласно приведенной выше настройке вы можете понять, почему этого не происходит.
Кажется, я не могу указать на это? У меня такое чувство, что это связано с тем, что я игнорирую время и просто полагаюсь на дату UTC, но я не уверен.