JODA DateTime предоставляет правильную дату и время в зависимости от летнего времени? или нам нужно добавить / вычесть время с разницей времени с даты [дубликат]

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

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

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
4
задан Kovács Imre 14 November 2013 в 15:13
поделиться

3 ответа

Как правило, время Джоды позаботится о DST, поэтому вам не придется беспокоиться об этом. Тем не менее, я замечаю, что вы передаете null в getOffset (). Учитывая, что смещение часового пояса зависит от даты, вам действительно нужно передать дату / время, когда вы вычисляете смещение, или вы получите неправильные результаты.

Также, как упоминалось в моем Предыдущий комментарий: Имейте в виду, что некоторые часовые пояса имеют смещение, которое не является целым числом часов. Например, Индия находится в GMT +5: 30

3
ответ дан LordOfThePigs 19 August 2018 в 06:26
поделиться

Часовые пояса и переход на летнее время - это кошмар. Вы, конечно, не должны сами решать эту задачу. Пусть Joda-Time делает тяжелый подъем.

См. этот ответ на аналогичный вопрос, Используя время Джоды, чтобы получить смещение UTC для заданной даты и часовой пояс , Класс DateTimeZone предлагает метод getOffset () .

Пример исходного кода в Joda-Time 2.3 в Java 7 ...

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.

org.joda.time.DateTimeZone californiaTimeZone = org.joda.time.DateTimeZone.forID("America/Los_Angeles");

org.joda.time.DateTime now = new org.joda.time.DateTime(californiaTimeZone);
int millisecondOffsetToAddToUtcToGetLocalTime = californiaTimeZone.getOffset( now );

System.out.println( "millisecondOffsetToAddToUtcToGetLocalTime: " + millisecondOffsetToAddToUtcToGetLocalTime );

// Note the casting to doubles to avoid integer truncation. Time zone offsets are NOT always whole hours.
System.out.println( "Offset in decimal hours: " + (double)millisecondOffsetToAddToUtcToGetLocalTime / 1000d / 60d / 60d );

При запуске в 2013-11-20T01: 03: 56.464-08: 00 ...

millisecondOffsetToAddToUtcToGetLocalTime: -28800000
millisecondOffsetToAddToUtcToGetLocalTime in hours: -8.0

ВАЖНО Этот формат номера -8.0 неверен для смещения. Должно быть либо:

  • -08:00 с двоеточием и двузначными цифрами (с добавлением начального нуля).
  • -08 с начальным нулем.
7
ответ дан Community 19 August 2018 в 06:26
поделиться

Да, все в порядке. Чтобы убедиться, что это правильно - вместо передачи null в объекте DateTime в DateTimeZone.getOffset - установите дату и время на лету, когда вы знаете, что действует DST - вы должны увидеть изменение значения смещения.

1
ответ дан ishaaq 19 August 2018 в 06:26
поделиться
Другие вопросы по тегам:

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