Эквивалент C # DateTime.Now в Java? - PullRequest
340 голосов
/ 06 января 2010

Как мне получить текущую дату в Java?

В C # это DateTime.Now.

Ответы [ 10 ]

411 голосов
/ 06 января 2010

Просто создайте новый Date объект без каких-либо аргументов;это назначит текущую дату и время новому объекту.

import java.util.Date;

Date d = new Date();

В словах Javadocs для конструктор с нулевым аргументом :

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

Убедитесь, что вы 'используется java.util.Date, а не java.sql.Date - последний не имеет конструктора с нулевым аргументом и имеет несколько другую семантику, которая является темой совершенно другого разговора.:)

58 голосов
/ 06 января 2010

Классы Java Дата и Календарь считаются многими плохо спроектированными. Вы должны взглянуть на Joda Time , библиотеку, обычно используемую вместо встроенных в Java библиотек дат.

Эквивалент DateTime.Now в Joda Time:

DateTime dt = new DateTime();

Обновление

Как отмечается в комментариях, в последних версиях Joda Time есть метод DateTime.now(), поэтому:

DateTime dt = DateTime.now();
33 голосов
/ 11 мая 2015

ТЛ; др

Instant.now()

java.time

Класс java.util.Date был устаревшим новым пакетом java.time ( Tutorial ) в Java 8 и более поздних версиях. Старые классы java.util.Date/.Calendar общеизвестно хлопотны, сбивают с толку и имеют недостатки. Избегайте их.

ZonedDateTime

Получить текущий момент в java.time.

ZonedDateTime now = ZonedDateTime.now();

A ZonedDateTime инкапсулирует:

  • Дата.
  • Время суток, с долей секунды до наносекунды разрешение.
  • Часовой пояс.

Если часовой пояс не указан, текущий часовой пояс по умолчанию для вашей JVM назначается автоматически. Лучше указать желаемый / ожидаемый часовой пояс, чем неявно полагаться по умолчанию.

ZoneId z = ZoneId.of( "Pacific/Auckland" );
ZonedDateTime zdt = ZonedDateTime.now( z );

UTC

Как правило, лучше привыкнуть к выполнению серверной работы (бизнес-логика, база данных, хранение, обмен данными) в часовом поясе 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. Это обеспечивает строительный блок для зонированной даты и времени, а также назначение часового пояса. Вы можете думать об этом концептуально так:

ZonedDateTime = Instant + ZoneId

Вы можете извлечь Instant из ZonedDateTime.

Instant instantNow = zdt.toInstant();

Вы можете начать с мгновенного. Здесь нет необходимости указывать часовой пояс, так как Instant всегда в UTC.

Instant now = Instant.now();
16 голосов
/ 06 января 2010

Я предпочитаю использовать объект календаря.

Calendar now = GregorianCalendar.getInstance()

Мне гораздо легче работать. Вы также можете получить объект Date из календаря.

http://java.sun.com/javase/6/docs/api/java/util/GregorianCalendar.html

14 голосов
/ 20 апреля 2014

В Java 8 это:

ZonedDateTime dateTime = ZonedDateTime.now();
12 голосов
/ 06 января 2010
import java.util.Date;   
Date now = new Date();

Обратите внимание, что объект Дата является изменяемым, и если вы хотите сделать что-то сложное, используйте jodatime .

10 голосов
/ 06 января 2010

java.lang.System.currentTimeMillis(); вернет дату и время начиная с эпохи

6 голосов
/ 27 августа 2012
import org.joda.time.DateTime;

DateTime now = DateTime.now();
5 голосов
/ 06 января 2010

Если вы создаете новый объект Date, по умолчанию для него будет установлено текущее время:

import java.util.Date;
Date now = new Date();
3 голосов
/ 26 июня 2015

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() возвращает текущую дату и время, используя систему часы и часовой пояс по умолчанию, не ноль . Получает текущий дата-время из системных часов в часовом поясе по умолчанию. Это будет запросить системные часы в часовом поясе по умолчанию, чтобы получить текущий дата-время. Использование этого метода предотвратит возможность использования альтернативные часы для тестирования, потому что часы жестко запрограммированы.

...