Существует разница между локальным и серверным временем
в приложении MVC4 c# я использовал DateTime.Now
когда объект создан в моем приложении. После развертывания разница между локальным компьютером и хостингом составила +8 часов. Затем я изменил его на DateTime.UtcNow
, теперь разница -4 часа.
например, в моем компьютере дата 20 Mar 2013, 14:28:12
, но дата хранит в базе данных, как 20 Mar 2013, 10:28:12.
что я должен делать всем пользователям во всех странах, чтобы использовать 1 ту же дату?
Edit: мой часовой пояс в(UTC+04:00) Баку сервер после PST
3 ответов
допустим, например, что ваш пользователь находится в Нью-Йорке (GMT - 5), а ваш сервер-в Индии (GMT + 5:30).
когда пользователь видит "локальное" время 10: 00am (EST), ваш сервер будет видеть "локальное" время 7:30pm (IST). Однако, используя UTC в обоих местах....пользователь увидит время UTC 3pm, а сервер увидит время UTC 3pm.
использование UTC во всех местах, но сохранение referece часового пояса пользователей позволяет всегда работать в UTC, но по-прежнему преобразуйте время в "локальное" время пользователей, когда вы хотите показать его им.
вы также не можете полагаться на то, где сервер размещается особенно, если это виртуальный сервер. Также вы не можете предположить, в какой часовой пояс хостинговая компания установила свои серверы. Лучше всего всегда кодировать defensivly с помощью DateTime.UtcNow
при хранении времени даты в базе данных.
чтобы преобразовать это время UTC обратно в часовой пояс пользователя, вам нужно будет сделать следующее:
DateTime utcTime = new DateTime(2013, 03, 25, 10, 20, 00);
TimeZoneInfo usersTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTime usersLocalTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, usersTimeZone);
Console.WriteLine(utcTime.ToString("hh:mm:ss");
Console.WriteLine(usersLocalTime.ToString("hh:mm:ss");
к твоему сведению, ты можно найти список часовых поясов из:
TimeZoneInfo.GetSystemTimeZones()
это должно распечатать:
10:20:00
05:20:00
как вы можете видеть, Вам нужно будет знать часовой пояс пользователей. Есть 2 способа узнать время пользователей:
- пользователь выбирает свой часовой пояс в своих пользовательских настройках
- используйте javascript для обнаружения часового пояса своей машины и отправьте его обратно с помощью формы
Я бы предложил первый вариант, так как второй можно усложнить людям жизнь. Например, если они базируются в Великобритании и летают в Штаты на неделю. Все изменится, и они могут не понять!
когда я работал над проектом, используемым международными пользователями, мы всегда использовали DateTime.UtcNow
если это локальный проект - т. е. предназначена только для использования в вашем часовом поясе, то DateTime.Now
будет достаточно.
ваше местное время-это ваше системное время. Проверьте часовой пояс в операционной системе. Время сервера, на которое вы ссылаетесь, соответствует часовому поясу в файлах конфигурации сервера.
убедитесь, что у вас есть часовой пояс операционной системы и часовой пояс вашего сервера.