tl; dr
Instant.now() // Current moment in UTC.
… или…
ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ) // In a particular time zone
Подробности
Другие ответы, хотя и правильные, устарели.Старые классы даты и времени оказались плохо продуманными, запутанными и хлопотными.
java.time
Эти старые классы были заменены фреймворком java.time .
Эти новые классы вдохновлены очень успешным Joda-Time проектомопределяется JSR 310 и расширяется проектом ThreeTen-Extra .
См. Руководство по Oracle .
Instant
An Instant
- это момент времени на UTC с разрешением до наносекунд .
Instant instant = Instant.now(); // Current moment in UTC.
Часовой пояс
Примените часовой пояс (ZoneId
), чтобы получить ZonedDateTime
.Если вы опустите часовой пояс, текущий часовой пояс вашего JVM будет применен неявно.Лучше явно указать желаемый / ожидаемый часовой пояс.
Используйте правильные имена часовых поясов в формате continent/region
, например America/Montreal
, Europe/Brussels
или Asia/Kolkata
.Никогда не используйте 3-4-буквенные сокращения, такие как EST
или IST
, поскольку они не являются ни стандартизированными, ни уникальными.
ZoneId zoneId = ZoneId.of( "America/Montreal" ); // Or "Asia/Kolkata", "Europe/Paris", and so on.
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
Генерация строк
Вы можете легко сгенерировать String
как текстовое представление значения даты и времени.Вы можете использовать стандартный формат, свой собственный пользовательский формат или автоматически локализованный формат.
ISO 8601
Вы можете вызывать методы toString
для получения текста, отформатированного с использованием общего и разумного ISO 8601 стандарт.
String output = instant.toString();
2016-03-23T03: 09: 01.613Z
Обратите внимание, что для ZonedDateTime
метод toString
расширяет стандарт ISO 8601 путем добавленияНазвание часового пояса в квадратных скобках.Чрезвычайно полезная и важная информация, но не стандартная.
2016-03-22T20: 09: 01.613-08: 00 [America / Los_Angeles]
Пользовательский формат
Или укажите свой собственный конкретный шаблон форматирования с классом DateTimeFormatter
.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd/MM/yyyy hh:mm a" );
Укажите Locale
для человеческого языка (английский, Французский и т. Д.) Для использования в переводе названия дня / месяца, а также в определении культурных норм, таких как порядок года, месяц и дата.Обратите внимание, что Locale
не имеет никакого отношения к часовому поясу.
formatter = formatter.withLocale( Locale.US ); // Or Locale.CANADA_FRENCH or such.
String output = zdt.format( formatter );
Локализация
Еще лучше, пусть java.time выполнит работу по локализации автоматически.
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.MEDIUM );
String output = zdt.format( formatter.withLocale( Locale.US ) ); // Or Locale.CANADA_FRENCH and so on.
О java.time
Платформа java.time встроена в Java 8и позже.Эти классы вытесняют проблемные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на классы java.time .
Чтобы узнать больше, см. Oracle Tutorial .И поиск переполнения стека для многих примеров и объяснений.Спецификация: JSR 310 .
Вы можете обмениваться java.time объектами напрямую с вашей базой данных.Используйте драйвер JDBC , совместимый с JDBC 4.2 или более поздней версии.Нет необходимости в строках, нет необходимости в java.sql.*
классах.
Где получить классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти некоторые полезные классы, такие как Interval
, YearWeek
, YearQuarter
и more .