Подтвердить что ты не робот

Эквивалент С# DateTime.Now в Java?

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

В С# это DateTime.Now.

4b9b3361

Ответ 1

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

import java.util.Date;

Date d = new Date();

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

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

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

Ответ 2

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

Эквивалент DateTime.Now в времени Джоды:

DateTime dt = new DateTime();

Обновление

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

DateTime dt = DateTime.now();

Ответ 3

TL;DR

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 инкапсулирует:

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

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

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. Здесь нет необходимости указывать часовой пояс, поскольку Instant всегда находится в UTC.

Instant now = Instant.now();

Ответ 5

В Java 8 это:

ZonedDateTime dateTime = ZonedDateTime.now();

Ответ 6

import java.util.Date;   
Date now = new Date();

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

Ответ 7

java.lang.System.currentTimeMillis(); вернет дату-время, так как эпоха

Ответ 8

import org.joda.time.DateTime;

DateTime now = DateTime.now();

Ответ 9

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

import java.util.Date;
Date now = new Date();

Ответ 10

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