.net - определение TimeZone на уровне приложения - PullRequest
1 голос
/ 21 января 2011

У меня есть глобальное приложение, составленное многими подприложениями:

  • Веб-сайты
  • Службы Windows

Я хочу отправить это "приложениечасть "на многих серверах.Моя проблема: я хочу, чтобы даты были еще точными.Если событие хранится в 18:00 по тихоокеанскому времени, я не хочу, чтобы мои европейские пользователи видели «18:00» на своей доске.

Я прочитал много статей, в которых говорится «вам просто нужно сохранить ваши даты таким образом "=> но Я не могу изменить способ сохранения каждой отдельной даты, что представляет собой слишком много работы (и да, это дата и время, которые сохранены, а не dateoffset).

Я читал другие статьи, в которых предлагается изменить часовой пояс на сервере => Но Я не могу хотеть это сделать, поскольку этот сервер можно использовать для других целей..

Хорошая новость заключается в том, что даты всегда определяются в приложении и не генерируется базой данных.

Следовательно, единственное, что мне нужно сделать, это определить часовой пояс на уровне приложения .Поэтому, где бы они ни находились, мои приложения всегда будут работать с одним и тем же часовым поясом.Единственным оставшимся шагом будет преобразование дат на уровне пользовательского интерфейса во временную зону текущего пользователя (очень просто, поскольку все даты проходят через один и тот же локализованный метод преобразования даты и времени).

Я действительно не могу позволить себе измененияспособы работы приложения-разработчика, так как они будут подвержены ошибкам.Им нужно продолжать использовать DateTime.Now, даже не задумываясь о конверсии.

Точные технологии, которые я использую, здесь не актуальны, вопрос глобальный .Net.

Спасибо за вашу помощь


Редактировать: допустим, моя проблема в том, чтобы DateTime.Now вернуть UTC дату .Есть ли способ сделать это?

Ответы [ 3 ]

1 голос
/ 21 января 2011

Хранить все время в UTC.

DateTime.UtcNow

Затем позаботьтесь о коррекции TZ на клиенте.

Редактировать: я пропустил эту важную часть о том, чтобы не изменять DateTime.Now. Заставьте программистов делать все правильно; не менее подвержен ошибкам.

Вам либо нужно, чтобы весь код клиента использовал DateTime.UtcNow, либо чтобы весь код клиента использовал базу данных для получения меток времени. В любом случае - у вас есть работа.

Удачи!

0 голосов
/ 21 января 2011

Опция: Сохранить все даты в GMT / UTC, затем получить часовой пояс с помощью javascript от пользователя (его браузера) и отобразить даты с учетом этого часового пояса.

// Gets the Browsers timezone offset in minutes
function getClientTimezoneOffsetInMinutes()
{
    var rightNow = new Date();
    var date1 = new Date(rightNow.getFullYear(), 0, 1, 0, 0, 0, 0);
    var date2 = new Date(rightNow.getFullYear(), 6, 1, 0, 0, 0, 0);
    var temp = date1.toGMTString();
    var date3 = new Date(temp.substring(0, temp.lastIndexOf(" ") - 1));
    var temp = date2.toGMTString();
    var date4 = new Date(temp.substring(0, temp.lastIndexOf(" ") - 1));
    var hoursDiffStdTime = (date1 - date3) / (1000 * 60 * 60);
    var hoursDiffDaylightTime = (date2 - date4) / (1000 * 60 * 60);
    return hoursDiffStdTime;
}
0 голосов
/ 21 января 2011

Я собираюсь дать вам простой ответ, с пониманием, что если ответ такой простой, я, вероятно, неправильно понимаю вопрос:

Сохранение часового пояса локального приложения на сервере. Тогда вы можете изменить местное время, как вам нужно. Если ваши локальные разработчики используют DateTime.Now, это нормально, если где-то в базе данных вы можете сказать, что это значение DateTime.Now настроено для этого часового пояса.

Это или я что-то упускаю?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...