Этот Вопрос старше, чем этот Вопрос, ранее помеченный как дубликат. Поэтому я поменял обозначение, снова открыв этот Вопрос и пометив новый как дубликат.
Базилик Бурк
Ответы:
414
Просто создайте новый Dateобъект без каких-либо аргументов; это назначит текущую дату и время новому объекту.
Выделяет объект Date и инициализирует его так, чтобы он представлял время, в которое он был выделен , с точностью до миллисекунды.
Убедитесь, что вы используете, java.util.Dateа не java.sql.Date- последний не имеет конструктора с нулевым аргументом и имеет несколько другую семантику, которая является темой совершенно другого разговора. :)
Также обратите внимание, что GregorianCalendar и многие похожие объекты работают одинаково. Поэтому, независимо от типа объекта даты / календаря, с которым вы работаете, конструктор с нулевым аргументом обычно инициализирует объект текущей датой / временем.
Питер Ди Чекко
С даты документа: Начиная с JDK 1.1, класс Calendar должен использоваться для преобразования между полями даты и времени, а класс DateFormat должен использоваться для форматирования и анализа строк даты.
Классы Java Date и Calendar считаются многими плохо спроектированными. Вы должны взглянуть на Joda Time , библиотеку, обычно используемую вместо встроенных в Java библиотек дат.
Эквивалент DateTime.Nowв Joda Time:
DateTime dt =newDateTime();
Обновить
Как отмечается в комментариях, в последних версиях Joda Time есть DateTime.now()метод, поэтому:
Обратите внимание, что этот ответ был опубликован в 2010 году. Java 8 вобрала в себя многие из лучших возможностей Joda Time. Смотрите официальную документацию и многие другие онлайн-статьи для получения дополнительной информации.
DavidS
36
ТЛ; др
Instant.now()
java.time
Класс java.util.Date был устаревшим новым пакетом java.time ( Учебное пособие ) в Java 8 и более поздних версиях. Старые классы java.util.Date/.Calendar общеизвестно хлопотны, сбивают с толку и имеют недостатки. Избежать их.
Если часовой пояс не указан, текущий часовой пояс по умолчанию для вашей JVM назначается автоматически. Лучше указать желаемый / ожидаемый часовой пояс, чем неявно полагаться на значение по умолчанию.
ZoneId z =ZoneId.of("Pacific/Auckland");ZonedDateTime zdt =ZonedDateTime.now( z );
универсальное глобальное время
Как правило, лучше привыкнуть выполнять свою внутреннюю работу (бизнес-логика, база данных, хранилище, обмен данными) в часовом поясе UTC . Приведенный выше код неявно опирается на текущий часовой пояс JVM по умолчанию.
InstantКласс представляет собой момент на временной шкале в UTC с разрешением наносекунд.
Instant instant =Instant.now();
Этот Instantкласс является базовым классом строительных блоков в java.time и может часто использоваться в вашем коде.
Вы легко можете настроить другой часовой пояс для представления пользователю. Используйте правильное имя часового пояса , а не 3-4-буквенные коды, такие как ESTили IST.
ZoneId z =ZoneId.of("America/Montreal");ZonedDateTime nowMontreal = instant.atZone( z );
Создайте строковое представление этого значения даты и времени, локализованное.
Или, чтобы остаться в UTC, используйте Instant. InstantОбъект представляет собой момент на временной шкале, к наносекундному разрешению, всегда в UTC. Это обеспечивает строительный блок для зонированной даты и времени вместе с назначением часового пояса. Вы можете думать об этом концептуально так:
Java всегда получала недостаточную поддержку для случаев использования даты и времени. Например, существующие классы (такие как java.util.Dateи SimpleDateFormatter) не являются потокобезопасными, что может привести к проблемам параллелизма. Также есть определенные недостатки в API. Например, годы java.util.Dateначинаются с 1900 года, месяцы начинаются с 1, а дни начинаются с 0 - не очень интуитивно. Эти проблемы привели к популярности сторонних библиотек даты и времени, таких как Joda-Time. Для адресации новой даты и времени разработан API для Java SE 8.
Метод now()возвращает текущую дату и время, используя системные часы и часовой пояс по умолчанию, а не ноль . Он получает текущую дату и время из системных часов в часовом поясе по умолчанию. Это запросит системные часы в часовом поясе по умолчанию, чтобы получить текущую дату и время. Использование этого метода предотвратит возможность использовать альтернативные часы для тестирования, потому что часы жестко запрограммированы.
Ответы:
Просто создайте новый
Date
объект без каких-либо аргументов; это назначит текущую дату и время новому объекту.По словам Javadocs для конструктора с нулевым аргументом :
Убедитесь, что вы используете,
java.util.Date
а неjava.sql.Date
- последний не имеет конструктора с нулевым аргументом и имеет несколько другую семантику, которая является темой совершенно другого разговора. :)источник
Классы Java Date и Calendar считаются многими плохо спроектированными. Вы должны взглянуть на Joda Time , библиотеку, обычно используемую вместо встроенных в Java библиотек дат.
Эквивалент
DateTime.Now
в Joda Time:Обновить
Как отмечается в комментариях, в последних версиях Joda Time есть
DateTime.now()
метод, поэтому:источник
ТЛ; др
java.time
Класс java.util.Date был устаревшим новым пакетом java.time ( Учебное пособие ) в Java 8 и более поздних версиях. Старые классы java.util.Date/.Calendar общеизвестно хлопотны, сбивают с толку и имеют недостатки. Избежать их.
ZonedDateTime
Получить текущий момент в java.time.
А
ZonedDateTime
инкапсулирует:Если часовой пояс не указан, текущий часовой пояс по умолчанию для вашей JVM назначается автоматически. Лучше указать желаемый / ожидаемый часовой пояс, чем неявно полагаться на значение по умолчанию.
универсальное глобальное время
Как правило, лучше привыкнуть выполнять свою внутреннюю работу (бизнес-логика, база данных, хранилище, обмен данными) в часовом поясе UTC . Приведенный выше код неявно опирается на текущий часовой пояс JVM по умолчанию.
Instant
Класс представляет собой момент на временной шкале в UTC с разрешением наносекунд.Этот
Instant
класс является базовым классом строительных блоков в java.time и может часто использоваться в вашем коде.Если вам нужно больше гибкости в форматировании, преобразуйте в
OffsetDateTime
. УкажитеZoneOffset
объект. Для UTC используйте удобную константу для UTC .Часовой пояс
Вы легко можете настроить другой часовой пояс для представления пользователю. Используйте правильное имя часового пояса , а не 3-4-буквенные коды, такие как
EST
илиIST
.Создайте строковое представление этого значения даты и времени, локализованное.
Instant
Или, чтобы остаться в UTC, используйте
Instant
.Instant
Объект представляет собой момент на временной шкале, к наносекундному разрешению, всегда в UTC. Это обеспечивает строительный блок для зонированной даты и времени вместе с назначением часового пояса. Вы можете думать об этом концептуально так:Вы можете извлечь
Instant
изZonedDateTime
.Вы можете начать с мгновенного. Здесь нет необходимости указывать часовой пояс, как
Instant
всегда в UTC.источник
Я предпочитаю использовать объект календаря.
Мне намного легче работать. Вы также можете получить объект Date из календаря.
http://java.sun.com/javase/6/docs/api/java/util/GregorianCalendar.html
источник
Calendar.getInstance()
В Java 8 это:
источник
Обратите внимание, что объект Date является изменчивым, и если вы хотите сделать что-то сложное, используйте jodatime .
источник
java.lang.System.currentTimeMillis();
вернет дату и время с эпохиисточник
источник
Если вы создаете новый объект Date, по умолчанию он будет установлен на текущее время:
источник
Java всегда получала недостаточную поддержку для случаев использования даты и времени. Например, существующие классы (такие как
java.util.Date
иSimpleDateFormatter
) не являются потокобезопасными, что может привести к проблемам параллелизма. Также есть определенные недостатки в API. Например, годыjava.util.Date
начинаются с 1900 года, месяцы начинаются с 1, а дни начинаются с 0 - не очень интуитивно. Эти проблемы привели к популярности сторонних библиотек даты и времени, таких какJoda-Time
. Для адресации новой даты и времени разработан API для Java SE 8.Согласно документу :
источник