Как показать время UTC как местное время на веб-странице?

У меня есть база данных, которая содержит время как UTC. Это время можно показать на веб-странице, поэтому мне было предложено показать его как местное время на странице, так как оно может быть просмотрено из любой страны. Коллега кое-что упомянул о настройке страны из текущего потока (на сервере), но я не мог найти никаких подробностей об этом. Я хочу сделать это?

Ответы

Ответ 1

Если вы (и ваш сайт) удобны с javascript, есть очень простой способ сделать это.

Во-первых, на стороне сервера у вас будет дата/время UTC, отформатированное в формате RFC 3339 (стандарт для интернет-времени, используемый, среди других протоколов, icalendar). Основной синтаксис RFC 3339:

YYYY-MM-DDTHH:MM:SS

Так, что, где я, время будет:

2010-05-04T05:52:33

Но когда время не локальное, а UTC, вы добавляете Z в конец, чтобы обозначить это. Так что в моем случае, так как я нахожусь в -0500 часов по Гринвичу, то же самое время было бы:

2010-05-04T10:52:33Z

Итак, сначала вы получите сервер для вывода вышеперечисленного на ваш веб-сайт javascript. Затем javascript может проанализировать эту метку времени, и она выведет дату и время, настроенные на часовой пояс браузера (который определяется компьютером, на котором размещен браузер). Вы должны помнить, что если пользователь из Токио и просматривает ваш сайт в Испании, он увидит метку времени в Токио, если они не отрегулировали свои компьютерные часы.

Итак, javascript будет:

    var time_string_utc = some_server_variable; // timestamp from server
    var time_string_utc_epoch = Date.parse(time_string_utc);
    var time_utc = new Date();
    time_utc.setTime(time_string_utc_epoch);

В этот момент у вас есть объект даты javascript, установленный на метку времени UTC. Быстрое объяснение того, что происходит выше:

Первая переменная предполагает, что вы передали строку timestamp этой переменной с сервера.

Вторая переменная использует метод Date.parse() для преобразования строки в метку времени.

Третья переменная создает объект Unset Date.

В последней строке используется метод setTime, который устанавливает объект Date из временной метки эпохи.

Теперь, когда у вас есть объект, вы можете вывести его пользователю, как сочтете нужным. В качестве простого эксперимента вы можете использовать:

document.write(time_utc);

который, если вы находитесь в моем часовом поясе, используя временную метку UTC, я начал с:

2010-05-04T10:52:33Z

даст:

 Tue May 04 2010 05:52:33 GMT-0500 (CST)

но вы можете использовать различные методы javascript для форматирования времени во что-то более приятное.

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

Опять же, короткая версия:

    var time_string_utc = some_server_variable; // UTC time from server
    var time_string_utc_epoch = Date.parse(some_server_variable);
    var time_utc = new Date();
    time_utc.setTime(time_string_utc_epoch);
    document.write(time_utc);

Ответ 2

Также рассмотрите возможность чтения этой темы, которая погружается глубже в dos и donts обработки проблемы с летним временем во время часовых поясов

Ответ 3

Возможно. Вам просто нужно найти country settings, чтобы определить страну, откуда пришел ваш пользователь, а затем изменить отображаемую дату в соответствии с этим временем страны. Вы также можете найти другой способ обнаружить страну пользователя (возможно, с его IP-адреса).

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

Ответ 4

EDIT:

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

Получение американской культуры, например, не поможет, поскольку у США много часовых поясов.

Я думаю, что использование Javascript, как предлагает Энтони, было бы способом...

OLD:

Вы можете переопределить метод InitializeCulture() с кодом, который устанавливает текущие (выбранные или отображаемые в браузере) культуры:

Thread.CurrentThread.CurrentCulture = 
            CultureInfo.CreateSpecificCulture(selectedLanguage);
Thread.CurrentThread.CurrentUICulture = new 
            CultureInfo(selectedLanguage);