Java-эквивалент .NET DateTime.MinValue, DateTime.Today

Есть ли Java-эквивалент DateTime.MinValue и DateTime.Today в классе Java Date? Или способ добиться чего-то подобного?

Я понял, как испортил вам класс .NET datetime, мне также нужен эквивалент AddDays(), AddMonths().

Ответы

Ответ 1

Фактический API-интерфейс Java datetime joda-time.

С его помощью вы можете получить текущую дату/время, просто построив new DateTime().

Аналогично, без него вы можете использовать Calendar.getInstance() или new Date() для получения текущей даты/времени.

MinValue может быть Calendar.getInstance(0)/new Date(0). Это будет использовать хронологию по умолчанию, то есть с 1 января 1970 года. Поскольку MinValue возвращает Januar 1-го, 1-го года, вы можете просто указать эту дату, используя соответствующий конструктор DateTime.

Ответ 2

Сравнение функций даты и времени в .NET и Java

+--------------------+----------------------------------------+----------------------------+
| .NET DateTime (C#) | Joda  DateTime (Java) [See Note #2]    | Java Date                  |
+--------------------+----------------------------------------+----------------------------+
|                    |                                        |                            |
| DateTime.MinValue  | new DateTime(Long.MIN_VALUE)           | new Date(Long.MIN_VALUE)   |
|                    |                                        |    [See Note #3]           |
|                    |                                        |                            |
| DateTime.Today     | new DateTime().withTimeAtStartOfDay()  | Messy [See Note #4]        |
|                    |                                        |                            |
| DateTime.Now       | new DateTime()                         | new Date()                 |
|                    |                                        |                            |
| DateTime.MaxValue  | new DateTime(Long.MAX_VALUE)           | new Date(Long.MAX_VALUE)   |
|                    |                                        |                            |
+--------------------+----------------------------------------+----------------------------+

Дополнительные примечания:

  • Работа с датами и временем беспорядочна. Эта таблица предназначена для отправной точки для миграции кода. Сравнение сравнивает понятия, а не точные значения (например, минимальная дата/время .NET не совпадает с значением Java)
  • Joda DateTime является предпочтительной библиотекой даты и времени для Java.
  • Смотрите дополнительные примечания на new Date(Long.MIN_VALUE) в Java
  • Начало дня с Java Date немного больше - см. здесь.
  • .NET DateTimes по умолчанию - локальная дата/время, тогда как в Java они по умолчанию имеют UTC. Обязательно рассмотрите влияние часовых поясов при работе с датами и временем.

Ответ 3

Другие ответы могут быть правильными, но использовать устаревшие классы.

java.time

Предыдущие классы времени (java.util.Date/.Calendar и т.д.) были вытеснены Joda-Time, что в свою очередь был вытеснен java.time, встроенной в Java 8 и более поздние версии. Классы java.time вдохновлены Joda-Time, которые определяются JSR 310, расширенный проектом ThreeTen-Extra, перенесен на Java 6 и 7 проектом ThreeTen-Backport и адаптирован к Android в проекте ThreeTenABP. См. Tutorial.

Чтобы получить текущий момент на временной шкале в UTC с разрешением наносекунды, используйте Instant.

Instant now = Instant.now();

Instant имеет три константы:

  • EPOCH - 1970-01-01T00:00:00Z
  • MIN - -1000000000-01-01T00:00Z
  • MAX - 1000000000-12-31T23:59:59.999999999Z

Чтобы получить текущий момент для offset-from-UTC, примените ZoneOffset, чтобы получить OffsetDateTime.

OffsetDateTime now = OffsetDateTime.now( ZoneOffset.of( "-04:00" ) );

Лучше применять полный часовой пояс (смещение плюс правила для аномалий, таких как летнее время), если известно. Примените ZoneId, чтобы получить ZonedDateTime.

ZonedDateTime now = ZonedDateTime.now( ZoneId.of( "America/Montreal" ) );

Вы можете выполнить арифметику.

ZonedDateTime dayLater = now.plusDays( 1 );
ZonedDateTime monthLater = now.plusMonths( 1 );

Вы можете получить первый момент дня.

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime tomorrowStart = now.toLocalDate().atStartOfDay( zoneId );  // Usually time-of-day of `00:00:00.0` but not always.

Если вам нужна только дата без времени суток и без часового пояса, используйте LocalDate. Аналогично, LocalTime для времени без даты и без часового пояса. Обычно лучше придерживаться Instant и OffsetDateTime/ZonedDateTime, поскольку типы Local… не представляют действительные моменты на временной шкале (без смещения или временной зоны означает, что они undefined).

LocalDate localDate = LocalDate.now( zoneId );
LocalTime localTime = LocalTime.now( zoneId );

Ответ 5

чтобы получить текущую дату:

Календарь calendar = Calendar.getInstance();       SimpleDateFormat dateFormat = новый SimpleDateFormat ( "dd/MM/yyyy" );

    try {

        System.out.println("Today: " + dateFormat.format(calendar.getTime()));

    } catch (Exception e) {
        e.printStackTrace();
    }