Как получить текущую дату в Java?
В С# это DateTime.Now
.
Как получить текущую дату в Java?
В С# это DateTime.Now
.
Просто создайте новый объект Date
без каких-либо аргументов; это назначит текущую дату и время для нового объекта.
import java.util.Date;
Date d = new Date();
В словах Javadocs для конструктор нулевого аргумента:
Выделяет объект Date и инициализирует его так, чтобы он представлял время, в которое он был назначен, измеренный до ближайшей миллисекунды.
Убедитесь, что вы используете java.util.Date
, а не java.sql.Date
- последний не имеет конструктора с нулевым аргументом и имеет несколько другую семантику, которая является темой совершенно другого разговора.:)
Java Date и Calendar Многие считают, что многие классы плохо разработаны. Вы должны взглянуть на Joda Time - библиотеку, обычно используемую вместо встроенных библиотек даты Java.
Эквивалент DateTime.Now
в времени Джоды:
DateTime dt = new DateTime();
Обновление
Как отмечается в комментариях, последние версии Joda Time имеют метод DateTime.now()
, поэтому:
DateTime dt = DateTime.now();
Instant.now()
Класс java.util.Date устарел от нового пакета java.time (Tutorial) в Java 8 и более поздних версиях. Старые классы java.util.Date/.Calendar, как известно, являются неприятными, запутанными и ошибочными. Избегайте их.
ZonedDateTime
Получить текущий момент в java.time.
ZonedDateTime now = ZonedDateTime.now();
A ZonedDateTime
инкапсулирует:
Если часовой пояс не указан, ваш текущий часовой пояс JVMs назначается тихо. Лучше указать желаемый/ожидаемый часовой пояс, чем полагаться неявно на значение по умолчанию.
ZoneId z = ZoneId.of( "Pacific/Auckland" );
ZonedDateTime zdt = ZonedDateTime.now( z );
Как правило, лучше привыкнуть к выполнению вашей внутренней работы (бизнес-логика, база данных, хранилище, обмен данными) все в UTC часовой пояс. Приведенный выше код неявно ссылается на текущий часовой пояс по умолчанию JVM.
Класс Instant
представляет момент на временной шкале в UTC с разрешением наносекунд.
Instant instant = Instant.now();
Класс Instant
является базовым классом строительного блока в java.time и может часто использоваться в вашем коде.
Когда вам нужно больше гибкости в форматировании, перейдите в OffsetDateTime
. Укажите объект ZoneOffset
. Для UTC используйте удобную константу для UTC.
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );
Вы легко настраиваетесь на другой часовой пояс для представления пользователю. Используйте имя часового пояса, а не 3-4 буквенных кода, например EST
или IST
.
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime nowMontreal = instant.atZone( z );
Создайте строковое представление этого значения даты, локализованного.
String output = DateTimeFormatter
.ofLocalizedDate( FormatStyle.FULL )
.withLocale( Locale.CANADA_FRENCH )
.format ( nowMontreal );
Instant
Или, чтобы остаться в UTC, используйте Instant
. Объект Instant
представляет момент на временной шкале, до наносекундного разрешения, всегда в UTC. Это обеспечивает строительный блок для зональной даты-времени вместе с назначением часового пояса. Вы можете думать об этом концептуально следующим образом:
Вы можете извлечь Instant
из ZonedDateTime
.
Instant instantNow = zdt.toInstant();
Вы можете начать с Instant. Здесь нет необходимости указывать часовой пояс, поскольку Instant
всегда находится в UTC.
Instant now = Instant.now();
Я предпочитаю использовать объект Calendar.
Calendar now = GregorianCalendar.getInstance()
Мне гораздо легче работать. Вы также можете получить объект Date из Календаря.
http://java.sun.com/javase/6/docs/api/java/util/GregorianCalendar.html
В Java 8 это:
ZonedDateTime dateTime = ZonedDateTime.now();
import java.util.Date;
Date now = new Date();
Обратите внимание, что объект Date изменен, и если вы хотите сделать что-то сложное, используйте jodatime.
java.lang.System.currentTimeMillis();
вернет дату-время, так как эпоха
import org.joda.time.DateTime;
DateTime now = DateTime.now();
Если вы создаете новый объект Date, по умолчанию он будет установлен на текущее время:
import java.util.Date;
Date now = new Date();
Java всегда получал неадекватную поддержку для случаев использования даты и времени. Например, существующие классы (такие как java.util.Date
и SimpleDateFormatter
) arent потокобезопасны, что может привести к проблемам concurrency. Также есть некоторые недостатки в API. Например, годы в java.util.Date
начинаются с 1900 года, месяцы начинаются с 1, а дни начинаются с 0 - не очень интуитивно. Эти проблемы привели к популярности сторонних библиотек даты и времени, таких как Joda-Time
. Чтобы обратиться к новому API дат и времени, предназначен для Java SE 8.
LocalDateTime timePoint = LocalDateTime.now();
System.out.println(timePoint);
По doc:
Метод
now()
возвращает текущую дату-время с использованием системы часовой и часовой пояс по умолчанию, а не null. Он получает текущий дата-время с системных часов в часовом поясе по умолчанию. Это будет запросить системные часы в часовой пояс по умолчанию для получения текущего дата-время. Использование этого метода предотвратит возможность использования альтернативные часы для тестирования, потому что часы жестко закодированы.