Ответы:
Просто создайте новый 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
в Joda Time:
DateTime dt = new DateTime();
Обновить
Как отмечается в комментариях, в последних версиях Joda Time есть DateTime.now()
метод, поэтому:
DateTime dt = DateTime.now();
Instant.now()
Класс java.util.Date был устаревшим новым пакетом java.time ( Учебное пособие ) в Java 8 и более поздних версиях. Старые классы java.util.Date/.Calendar общеизвестно хлопотны, сбивают с толку и имеют недостатки. Избежать их.
ZonedDateTime
Получить текущий момент в java.time.
ZonedDateTime now = ZonedDateTime.now();
А ZonedDateTime
инкапсулирует:
Если часовой пояс не указан, текущий часовой пояс по умолчанию для вашей JVM назначается автоматически. Лучше указать желаемый / ожидаемый часовой пояс, чем неявно полагаться на значение по умолчанию.
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
всегда в UTC.
Instant now = Instant.now();
Я предпочитаю использовать объект календаря.
Calendar now = GregorianCalendar.getInstance()
Мне намного легче работать. Вы также можете получить объект Date из календаря.
http://java.sun.com/javase/6/docs/api/java/util/GregorianCalendar.html
Calendar.getInstance()
В Java 8 это:
ZonedDateTime dateTime = ZonedDateTime.now();
java.lang.System.currentTimeMillis();
вернет дату и время с эпохи
Если вы создаете новый объект Date, по умолчанию он будет установлен на текущее время:
import java.util.Date;
Date now = new Date();
Java всегда получала недостаточную поддержку для случаев использования даты и времени. Например, существующие классы (такие как java.util.Date
и SimpleDateFormatter
) не являются потокобезопасными, что может привести к проблемам параллелизма. Также есть определенные недостатки в API. Например, годы java.util.Date
начинаются с 1900 года, месяцы начинаются с 1, а дни начинаются с 0 - не очень интуитивно. Эти проблемы привели к популярности сторонних библиотек даты и времени, таких как Joda-Time
. Для адресации новой даты и времени разработан API для Java SE 8.
LocalDateTime timePoint = LocalDateTime.now();
System.out.println(timePoint);
Согласно документу :
Метод
now()
возвращает текущую дату и время, используя системные часы и часовой пояс по умолчанию, а не ноль . Он получает текущую дату и время из системных часов в часовом поясе по умолчанию. Это запросит системные часы в часовом поясе по умолчанию, чтобы получить текущую дату и время. Использование этого метода предотвратит возможность использовать альтернативные часы для тестирования, потому что часы жестко запрограммированы.