> Как лучше всего, не спрашивая пользователя о часовом поясе
Тогда вы должны будете предположить, что часовой пояс ОС клиента установлен правильно (часто это не так.case) и используйте этот часовой пояс для преобразования в / из ваших серверов времени , которое должно быть в UTC
Вот несколько методов расширения, которые позволяют вам сделать это.
Любые даты, отправленные клиенту, должны вызывать ToDisplayTime()
перед отображением в пользовательском интерфейсе клиента.
Аналогично, перед тем, как клиент отправляет дату на сервер, он должен вызвать FromDisplayTime()
для преобразованияэто к UTC. таким образом, сервер отправляет и получает время только в UTC
/// <summary>
/// Converts the specified DateTime (which should be the UTC time) into the users timezone.
/// </summary>
/// <param name="utcDateTime"></param>
/// <returns></returns>
public static DateTime ToDisplayTime(this DateTime utcDateTime)
{
var result = TimeZoneInfo.ConvertTime(utcDateTime, TimeZoneInfo.Local);
return result;
}
/// <summary>
/// Converts the specified DateTime from local time to UTC
/// </summary>
/// <param name="locatDateTime"></param>
/// <returns></returns>
public static DateTime FromDisplayTime(this DateTime locatDateTime)
{
var result = TimeZoneInfo.ConvertTime(locatDateTime, TimeZoneInfo.Local, TimeZoneInfo.FindSystemTimeZoneById("UTC"));
return result;
}