Дата/время дисплея в формате локали пользователя и время смещается

NullPointerException s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException. Они наиболее распространены, но другие способы перечислены на странице NullPointerException javadoc.

Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException, be:

public class Example {

    public static void main(String[] args) {
        Object obj = null;
        obj.hashCode();
    }

}

В первой строке внутри main я явно устанавливаю ссылку Object obj равной null. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.

(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

157
задан Nhan 2 December 2016 в 19:22
поделиться

8 ответов

Кажется, что самый надежный способ запуститься с даты UTC состоит в том, чтобы создать новое Date объект и использовать эти setUTC… методы для установки его на дату/время, которую Вы хотите.

Тогда различное toLocale…String методы обеспечат локализованный вывод.

Пример:

// This would come from the server.
// Also, this whole block could probably be made into an mktime function.
// All very bare here for quick grasping.
d = new Date();
d.setUTCFullYear(2004);
d.setUTCMonth(1);
d.setUTCDate(29);
d.setUTCHours(2);
d.setUTCMinutes(45);
d.setUTCSeconds(26);

console.log(d);                        // -> Sat Feb 28 2004 23:45:26 GMT-0300 (BRT)
console.log(d.toLocaleString());       // -> Sat Feb 28 23:45:26 2004
console.log(d.toLocaleDateString());   // -> 02/28/2004
console.log(d.toLocaleTimeString());   // -> 23:45:26

Некоторые ссылки:

158
ответ дан Nhan 23 November 2019 в 21:45
поделиться

Не знайте, как сделать, локаль, но JavaScript является клиентской технологией.

usersLocalTime = new Date();

будет иметь время и дату клиента в нем (как сообщается их браузером, и следовательно компьютером, они находятся в). Это должно быть тривиально, чтобы включать время сервера в ответ и сделать некоторую простую математику, чтобы приблизительно оценить смещение.

-8
ответ дан japollock 23 November 2019 в 21:45
поделиться

getTimeZoneOffset () и toLocaleString хороши для основной работы даты, но если Вы нуждаетесь в реальной поддержке часового пояса, смотрите TimeZone.js mde.

существует еще несколько опций, обсужденных в ответе на этот вопрос

1
ответ дан Community 23 November 2019 в 21:45
поделиться

Вы могли использовать следующее, которое сообщает о смещении часового пояса от GMT в минутах:

new Date().getTimezoneOffset();

Примечание: - эта функция возвращают отрицательное число.

2
ответ дан Mimouni 23 November 2019 в 21:45
поделиться

.getTimezoneOffset() метод сообщает о смещении часового пояса в минутах, рассчитывая "на запад" от часового пояса GMT/UTC, приводя к значению смещения, которое отрицательно к тому, к чему каждый обычно приучается. (Пример, нью-йоркское время, как сообщали бы, составляло бы +240 минут или +4 часа)

К тому, чтобы получать нормальное смещение часового пояса в часах, необходимо использовать:

var timeOffsetInHours = -(new Date()).getTimezoneOffset()/60

Важная деталь:
Примечание, что летнее время включено в результат - поэтому, что этот метод дает Вам, действительно время смещение - не фактическое географическое часовой пояс смещение.

3
ответ дан Már Örlygsson 23 November 2019 в 21:45
поделиться

Вот то, что я использовал в прошлых проектах:

var myDate = new Date();
var tzo = (myDate.getTimezoneOffset()/60)*(-1);
//get server date value here, the parseInvariant is from MS Ajax, you would need to do something similar on your own
myDate = new Date.parseInvariant('<%=DataCurrentDate%>', 'yyyyMMdd hh:mm:ss');
myDate.setHours(myDate.getHours() + tzo);
//here you would have to get a handle to your span / div to set.  again, I'm using MS Ajax's $get
var dateSpn = $get('dataDate');
dateSpn.innerHTML = myDate.localeFormat('F');
5
ответ дан Mark 23 November 2019 в 21:45
поделиться

Можно использовать new Date().getTimezoneOffset()/60 для часового пояса. Существует также toLocaleString() метод для отображения даты с помощью локали пользователя.

Вот целый список: Работа с Датами

20
ответ дан JJJ 23 November 2019 в 21:45
поделиться

После того, как вы создали объект даты, вот фрагмент для преобразования:

Функция принимает объект Date в формате UTC и строку формата.
Вам понадобится прототип Date.strftime .

function UTCToLocalTimeString(d, format) {
    if (timeOffsetInHours == null) {
        timeOffsetInHours = (new Date().getTimezoneOffset()/60) * (-1);
    }
    d.setHours(d.getHours() + timeOffsetInHours);

    return d.strftime(format);
}
7
ответ дан 23 November 2019 в 21:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: