Odpowiedzi:
Po prostu skonstruuj nowy Date
obiekt bez żadnych argumentów; spowoduje to przypisanie bieżącej daty i godziny do nowego obiektu.
import java.util.Date;
Date d = new Date();
Słowami Javadocs dla konstruktora zero-argumentowego :
Przydziela obiekt Date i inicjuje go, aby reprezentował czas, w którym został przydzielony , mierzony z dokładnością do milisekundy.
Upewnij się, że używasz, java.util.Date
a nie java.sql.Date
- ten drugi nie ma konstruktora z zerowym argumentem i ma nieco inną semantykę, która jest tematem zupełnie innej rozmowy. :)
Klasy Java Data i Kalendarz są przez wielu uważane za źle zaprojektowane. Powinieneś spojrzeć na Joda Time , bibliotekę powszechnie używaną zamiast wbudowanych bibliotek daty Java.
Odpowiednikiem DateTime.Now
w Joda Time jest:
DateTime dt = new DateTime();
Aktualizacja
Jak zauważono w komentarzach, najnowsze wersje Joda Time mają DateTime.now()
metodę, więc:
DateTime dt = DateTime.now();
Instant.now()
Klasa java.util.Date została przestarzała w nowym pakiecie java.time ( samouczek ) w Javie 8 i nowszych. Stare klasy java.util.Date/.Calendar są niezwykle kłopotliwe, mylące i mają wady. Unikaj ich.
ZonedDateTime
Uzyskaj aktualny moment w java.time.
ZonedDateTime now = ZonedDateTime.now();
A ZonedDateTime
obejmuje:
Jeśli nie określono strefy czasowej, bieżąca domyślna strefa czasowa maszyny JVM jest przypisywana w trybie cichym. Lepiej określić żądaną / oczekiwaną strefę czasową niż domyślnie polegać na domyślnych.
ZoneId z = ZoneId.of( "Pacific/Auckland" );
ZonedDateTime zdt = ZonedDateTime.now( z );
Generalnie lepiej jest przyzwyczaić się do wykonywania zadań zaplecza (logiki biznesowej, bazy danych, przechowywania, wymiany danych) - wszystko w strefie czasowej UTC . Powyższy kod domyślnie opiera się na bieżącej domyślnej strefie czasowej maszyny JVM.
Instant
Klasa reprezentuje moment na osi czasu UTC z rozdzielczością nanosekund.
Instant instant = Instant.now();
Instant
Klasa podstawowa klasa budynku blok w java.time i może być często używana w kodzie.
Gdy potrzebujesz większej elastyczności formatowania, zmień na OffsetDateTime
. Określ ZoneOffset
obiekt. W przypadku UTC użyj przydatnej stałej dla UTC .
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );
Łatwo dostosujesz się do innej strefy czasowej w celu prezentacji użytkownikowi. Użyj prawidłowej nazwy strefy czasowej , nigdy 3-4-literowych kodów, takich jak EST
lub IST
.
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime nowMontreal = instant.atZone( z );
Wygeneruj reprezentację ciągu dla tej wartości daty i godziny, zlokalizowanej.
String output = DateTimeFormatter
.ofLocalizedDate( FormatStyle.FULL )
.withLocale( Locale.CANADA_FRENCH )
.format ( nowMontreal );
Instant
Lub, aby pozostać w UTC, użyj Instant
. Instant
Obiekt reprezentuje moment na osi czasu, do rozdzielczości nanosekundy, zawsze w UTC. Zapewnia to blok konstrukcyjny strefowej daty i godziny oraz przypisanie strefy czasowej. Możesz myśleć o tym koncepcyjnie w ten sposób:
Możesz wyodrębnić Instant
z ZonedDateTime
.
Instant instantNow = zdt.toInstant();
Możesz zacząć od Instant. Nie trzeba tutaj określać strefy czasowej, jak Instant
zawsze w UTC.
Instant now = Instant.now();
Wolę używać obiektu kalendarza.
Calendar now = GregorianCalendar.getInstance()
Łatwiej jest mi pracować. Możesz także pobrać obiekt Data z Kalendarza.
http://java.sun.com/javase/6/docs/api/java/util/GregorianCalendar.html
Calendar.getInstance()
W Javie 8 jest to:
ZonedDateTime dateTime = ZonedDateTime.now();
java.lang.System.currentTimeMillis();
zwróci datę / godzinę od epoki
Jeśli utworzysz nowy obiekt Date, domyślnie zostanie on ustawiony na bieżącą godzinę:
import java.util.Date;
Date now = new Date();
Java zawsze nie zapewniała odpowiedniej obsługi przypadków użycia daty i godziny. Na przykład istniejące klasy (takie jak java.util.Date
i SimpleDateFormatter
) nie są bezpieczne dla wątków, co może prowadzić do problemów z współbieżnością. Istnieją również pewne wady w API. Na przykład lata java.util.Date
zaczynają się o 1900, miesiące zaczynają się od 1, a dni zaczynają od 0 - niezbyt intuicyjnie. Problemy te doprowadziły do popularności zewnętrznych bibliotek daty i godziny, takich jak Joda-Time
. Aby uwzględnić nową datę i godzinę, interfejs API został zaprojektowany dla Java SE 8.
LocalDateTime timePoint = LocalDateTime.now();
System.out.println(timePoint);
Zgodnie z dokumentem :
Metoda
now()
zwraca bieżącą datę i godzinę przy użyciu zegara systemowego i domyślnej strefy czasowej, a nie zerowej . Bieżącą datę i godzinę uzyskuje z zegara systemowego w domyślnej strefie czasowej. Spowoduje to zapytanie zegara systemowego w domyślnej strefie czasowej w celu uzyskania bieżącej daty i godziny. Zastosowanie tej metody zapobiegnie możliwości użycia alternatywnego zegara do testowania, ponieważ zegar jest zakodowany na stałe.