Відповіді:
Просто побудуйте новий Date
об’єкт без жодних аргументів; це призначить поточну дату та час новому об'єкту.
import java.util.Date;
Date d = new Date();
Словами Javadocs для конструктора нульових аргументів :
Виділяє об'єкт Date і ініціалізує його так, щоб він представляв час, в який він був виділений , вимірюється до найближчої мілісекунди.
Переконайтеся, що ви використовуєте, java.util.Date
а ні java.sql.Date
- останній не має конструктора з нульовим аргументом і має дещо іншу семантику, яка є темою зовсім іншої розмови. :)
Класи Java Date та Calendar багато хто вважає погано розробленими. Погляньте на Joda Time - бібліотеку, яка зазвичай використовується замість вбудованих бібліотек дат Java.
Еквівалент DateTime.Now
часу Joda Time:
DateTime dt = new DateTime();
Оновлення
Як зазначається в коментарях, останні версії Joda Time мають DateTime.now()
метод, так що:
DateTime dt = DateTime.now();
Instant.now()
Класс java.util.Date був застарілий новим пакетом java.time ( Підручник ) у 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 . Наведений вище код неявно покладається на поточний часовий пояс 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. Це забезпечує будівельний блок для зонованого часу дати, а також призначення часового поясу. Ви можете подумати про це концептуально таким чином:
Ви можете витягнути Instant
з ZonedDateTime
.
Instant instantNow = zdt.toInstant();
Ви можете почати з Миттєвого пошуку. Тут не потрібно вказувати часовий пояс, як Instant
це завжди в UTC.
Instant now = Instant.now();
Я вважаю за краще використовувати об’єкт Календар.
Calendar now = GregorianCalendar.getInstance()
Мені набагато легше працювати. Ви також можете отримати об’єкт Дата з календаря.
http://java.sun.com/javase/6/docs/api/java/util/GregorianCalendar.html
Calendar.getInstance()
У Java 8 це:
ZonedDateTime dateTime = ZonedDateTime.now();
java.lang.System.currentTimeMillis();
поверне дату з епохи
Якщо ви створюєте новий об'єкт дати, за замовчуванням він буде встановлений на поточний час:
import java.util.Date;
Date now = new Date();
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()
повертає поточну дату-час за допомогою системного годинника та часового поясу за замовчуванням, не нульовим . Він отримує поточну дату-час із системних годин у часовому поясі за замовчуванням. Це запитає системний годинник у часовому поясі за замовчуванням, щоб отримати поточний час-дату. Використання цього методу запобіжить можливість використання альтернативного годинника для тестування, оскільки годинник жорстко закодований.