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 );
Ответ 4
Большинство манипуляций с датами должны выполняться с использованием объекта Calendar.
http://download.oracle.com/javase/6/docs/api/java/util/Calendar.html
Ответ 5
чтобы получить текущую дату:
Календарь calendar = Calendar.getInstance(); SimpleDateFormat dateFormat = новый SimpleDateFormat ( "dd/MM/yyyy" );
try {
System.out.println("Today: " + dateFormat.format(calendar.getTime()));
} catch (Exception e) {
e.printStackTrace();
}
Ответ 6
Календарь событий
http://download.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html
И дата
http://download.oracle.com/javase/1.4.2/docs/api/java/util/Date.html
Theres также упрощает форматирование.
http://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html