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, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)
Кажется, что самый надежный способ запуститься с даты 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
Не знайте, как сделать, локаль, но JavaScript является клиентской технологией.
usersLocalTime = new Date();
будет иметь время и дату клиента в нем (как сообщается их браузером, и следовательно компьютером, они находятся в). Это должно быть тривиально, чтобы включать время сервера в ответ и сделать некоторую простую математику, чтобы приблизительно оценить смещение.
getTimeZoneOffset () и toLocaleString хороши для основной работы даты, но если Вы нуждаетесь в реальной поддержке часового пояса, смотрите TimeZone.js mde.
существует еще несколько опций, обсужденных в ответе на этот вопрос
Вы могли использовать следующее, которое сообщает о смещении часового пояса от GMT в минутах:
new Date().getTimezoneOffset();
Примечание: - эта функция возвращают отрицательное число.
.getTimezoneOffset()
метод сообщает о смещении часового пояса в минутах, рассчитывая "на запад" от часового пояса GMT/UTC, приводя к значению смещения, которое отрицательно к тому, к чему каждый обычно приучается. (Пример, нью-йоркское время, как сообщали бы, составляло бы +240 минут или +4 часа)
К тому, чтобы получать нормальное смещение часового пояса в часах, необходимо использовать:
var timeOffsetInHours = -(new Date()).getTimezoneOffset()/60
Важная деталь:
Примечание, что летнее время включено в результат - поэтому, что этот метод дает Вам, действительно время смещение - не фактическое географическое часовой пояс смещение.
Вот то, что я использовал в прошлых проектах:
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');
Можно использовать new Date().getTimezoneOffset()/60
для часового пояса. Существует также toLocaleString()
метод для отображения даты с помощью локали пользователя.
Вот целый список: Работа с Датами
После того, как вы создали объект даты, вот фрагмент для преобразования:
Функция принимает объект 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);
}