Второй подход позволяет компилятору произвести больше оптимизированного кода, потому что, когда адрес переменной передается функции, компилятор не может сохранить свое значение в регистре (регистрах) во время последующих вызовов к другим функциям. Код завершения обычно используется только однажды, сразу после вызова, тогда как "реальные" данные, возвращенные из вызова, могут использоваться чаще
Дата
всегда на основе UTC ... или нейтрального часового пояса, в зависимости от того, как вы хотите ее просматривать. A Дата
только представляет момент времени; он не зависит от часового пояса, всего несколько миллисекунд с эпохи Unix. Нет понятия «локальный экземпляр Date
». Используйте Дата
вместе с Calendar
и / или TimeZone.getDefault ()
, чтобы использовать «местный» часовой пояс. Используйте TimeZone.getTimeZone ("Europe / Madrid")
, чтобы получить часовой пояс Мадрида.
... или используйте Joda Time , что позволяет сделать все более понятным, ИМО. В Joda Time вы должны использовать значение DateTime
, которое представляет собой момент времени в определенной календарной системе и часовом поясе .
В Java 8 вы должны использовать ] java.time.ZonedDateTime
, который является эквивалентом Java 8 для Joda Time DateTime
.
DateTime
, которое представляет собой момент времени в определенной календарной системе и часовом поясе .
В Java 8 вы должны использовать ] java.time.ZonedDateTime
, который является эквивалентом Java 8 для Joda Time DateTime
.
DateTime
, которое представляет собой момент времени в определенной календарной системе и часовом поясе .
В Java 8 вы должны использовать ] java.time.ZonedDateTime
, который является эквивалентом Java 8 для Joda Time DateTime
.
Как уже сказал Джон Скит, java.util.Date
не имеет часового пояса. Объект Date
представляет количество миллисекунд с 1 января 1970 г., 12:00 AM, UTC. Он не содержит информации о часовом поясе.
Когда вы форматируете объект Date в строку, например, используя SimpleDateFormat
, вы можете установить часовой пояс для объекта DateFormat
чтобы сообщить ему, в каком часовом поясе вы хотите отображать дату и время:
Date date = new Date();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// Use Madrid's time zone to format the date in
df.setTimeZone(TimeZone.getTimeZone("Europe/Madrid"));
System.out.println("Date and time in Madrid: " + df.format(date));
Если вы хотите указать местный часовой пояс компьютера, на котором работает ваша программа, используйте:
df.setTimeZone(TimeZone.getDefault());
с использованием Календарь прост:
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("Europe/Madrid"));
Date currentDate = calendar.getTime();
Вы должны использовать JodaTime для этого. Java.util.Date очень ограничен в отношении TimeZone.
Вот пример:
Calendar c = Calendar.getInstance(TimeZone.getDefault());
Date date = c.getTime();