Jak można uzyskać godziny i minuty od Date.getHoursi Date.getMinutesgot przestarzałe? Przykłady, które znalazłem w wyszukiwarce Google, wykorzystywały przestarzałe metody.
Spróbuj użyć Joda Time zamiast standardowych klas java.util.Date. Biblioteka Joda Time ma znacznie lepsze API do obsługi dat.
DateTime dt =newDateTime();// current timeint month = dt.getMonth();// gets the current monthint hours = dt.getHourOfDay();// gets hour of day
Zobacz to pytanie, aby poznać zalety i wady korzystania z biblioteki Joda Time.
Joda Time może być również dołączony do niektórych przyszłych wersji Java jako standardowy komponent, patrz JSR-310 .
Jeśli musisz używać tradycyjnych klas java.util.Date i java.util.Calendar, zapoznaj się z ich dokumentami JavaDoc ( java.util.Calendar i java.util.Date ).
Możesz użyć tradycyjnych klas, takich jak ta, aby pobrać pola z danej instancji Date.
Date date =newDate();// given dateCalendar calendar =GregorianCalendar.getInstance();// creates a new calendar instance
calendar.setTime(date);// assigns calendar to given date
calendar.get(Calendar.HOUR_OF_DAY);// gets hour in 24h format
calendar.get(Calendar.HOUR);// gets hour in 12h format
calendar.get(Calendar.MONTH);// gets month number, NOTE this is zero based!
Ta okropna klasa została wyparta wiele lat temu przez nowoczesne klasy java.time , wraz z przyjęciem JSR 310. Użyj ZonedDateTimezamiast tego.
Basil Bourque
58
java.time
Chociaż jestem fanem Joda-Time , Java 8 wprowadza pakiet java.time , który jest wreszcie wartościowym standardowym rozwiązaniem Java! Przeczytaj ten artykuł, Java SE 8 Date and Time , aby uzyskać dużo informacji na temat java.time poza godzinami i minutami.
To najlepsza odpowiedź. Może chcesz, aby zapewnić wyraźny strefę czasową, aby przypomnieć czytelnikowi, i sobie, że jest to operacja wrażliwa strefa czasu: LocalDateTime.now(ZoneId.of("Asia/Manilla")). Czytaj now()tylko raz, aby zachować spójność (między dwoma wywołaniami upłynie czas). Jeśli data jest naprawdę nieistotna, LocalTimeteż działa.
Ole VV
1
Dziękuję Ci za to. Jakoś przez długi czas Tęskniłem za tą wspaniałą konstrukcją w klasie!
chrips
Komentarz Ole VV jest poprawny. Ale jeszcze lepiej, użyj ZonedDateTimeklasy zamiast LocalDateTime. Dzięki LocalDateTimeTobie bez powodu odrzucasz cenne informacje o strefie czasowej, nic nie zyskując.
Basil Bourque
Przydatne, jeśli nie musisz być kompatybilny wstecz. Niestety nie nadaje się, jeśli piszesz dla Androida i obsługujesz starsze wersje API (lub w jakimkolwiek innym przypadku, gdy Java 8 nie zawsze jest dostępna).
M_M
@M_M W przypadku języka Java 6 i 7 większość funkcji java.time jest przenoszona z powrotem w bibliotece ThreeTen-Backport . Dalsze dostosowanie do wczesnego Androida w ThreeTenABP . Linki znajdziesz w ostatniej sekcji mojej odpowiedzi .
Basil Bourque
36
Najpierw zaimportuj java.util.Calendar
Calendar now =Calendar.getInstance();System.out.println(now.get(Calendar.HOUR_OF_DAY)+":"+ now.get(Calendar.MINUTE));
Odpowiedz przez JD jest dobra, ale nie optymalne. Ta odpowiedź używa LocalDateTimeklasy. Bez jakiejkolwiek koncepcji strefy czasowej lub przesunięcia w stosunku do UTC, ta klasa nie może reprezentować momentu.
ZoneId z =ZoneID.of("America/Montreal");ZonedDateTime zdt =ZonedDateTime.now( z );
Określ strefę czasową
Jeśli pominiesz ZoneIdargument, zostanie on zastosowany niejawnie w czasie wykonywania przy użyciu bieżącej domyślnej strefy czasowej maszyny JVM.
Więc to:
ZonedDateTime.now()
… Jest taki sam jak ten:
ZonedDateTime.now(ZoneId.systemDefault())
Lepiej jest podać konkretną / oczekiwaną strefę czasową. Wartość domyślna może ulec zmianie w dowolnym momencie podczas działania.
Jeśli jest to krytyczne, potwierdź strefę czasową z użytkownikiem.
Godzina-minuta
Zapytaj ZonedDateTimeo godzinę i minutę.
int hour = zdt.getHour();int minute = zdt.getMinute();
LocalTime
Jeśli chcesz podać tylko porę dnia bez strefy czasowej, wyodrębnij LocalTime.
LocalTime lt = zdt.toLocalTime();
Lub ZonedDateTimecałkowicie pomiń , przechodząc bezpośrednio do LocalTime.
LocalTime lt =LocalTime.now( z );// Capture the current time-of-day as seen in the wall-clock time used by the people of a particular region (a time zone).
Możesz wymieniać obiekty java.time bezpośrednio ze swoją bazą danych. Użyj sterownika JDBC zgodnego z JDBC 4.2 lub nowszym. Nie ma potrzeby stosowania ciągów ani java.sql.*klas.
Projekt ThreeTen-Extra rozszerza java.time o dodatkowe klasy. Ten projekt jest poligonem doświadczalnym dla ewentualnych przyszłych dodatków do java.time. Można znaleźć kilka przydatnych klas tutaj takie jak Interval, YearWeek, YearQuarter, i więcej .
Wypróbuj Calender. Użyj getInstance, aby uzyskać obiekt kalendarza. Następnie użyj setTime, aby ustawić wymaganą datę. Teraz możesz użyć get (pole int) z odpowiednią stałą, taką jak HOUR_OF_DAY lub coś podobnego, aby odczytać potrzebne wartości.
Duplikować. Takie podejście zostało już omówione w odpowiedzi JD .
Basil Bourque
Czy to jest java.sql.Time? Z pewnością nie ma żadnego powodu, aby wprowadzać do gry tę przestarzałą klasę, kiedy już masz java.time.LocalTime. Zbytnie komplikujesz.
Ole VV
Wygląda na to, getMinutes()że został wycofany w (używam Java 1.8) i został zastąpiony przezCalendar.get(Calendar.MINUTE)
Saltz3
3
Jeszcze jednym sposobem uzyskiwania minut i godzin jest użycie SimpleDateFormat.
Bałem się dodać kolejną bibliotekę do mojego grubego projektu, ale jest to po prostu łatwe, szybkie, inteligentne i niesamowite. Ponadto do pewnego stopnia dobrze współgra z istniejącym kodem.
Chociaż nie polecałbym tego robić, myślę, że warto zauważyć, że chociaż wiele metod w java.util.Date zostało przestarzałych, nadal działają. W trywialnych sytuacjach ich użycie może być w porządku. Ponadto java.util.Calendar działa dość wolno, więc getMonth i getYear on Date mogą być pożyteczne szybciej.
import java.util.*Możesz uzyskać godziny i minuty, używając kalendarza i klasy formatera. Calendar cal = Calendar.getInstance()i Formatter fmt=new Formatter()ustawić format wyświetlania godzin i minut fmt.format("%tl:%M",cal,cal)oraz wydruków System.out.println(fmt) , takich jak10:12
java.util.Date
,java.util.Calendar
ijava.text.SimpleDateFormat
są teraz starsze , zastąpione przez klasy java.time wbudowane w Javę 8 i nowsze. Zobacz samouczek firmy Oracle .Odpowiedzi:
Spróbuj użyć Joda Time zamiast standardowych klas java.util.Date. Biblioteka Joda Time ma znacznie lepsze API do obsługi dat.
Zobacz to pytanie, aby poznać zalety i wady korzystania z biblioteki Joda Time.
Joda Time może być również dołączony do niektórych przyszłych wersji Java jako standardowy komponent, patrz JSR-310 .
Jeśli musisz używać tradycyjnych klas java.util.Date i java.util.Calendar, zapoznaj się z ich dokumentami JavaDoc ( java.util.Calendar i java.util.Date ).
Możesz użyć tradycyjnych klas, takich jak ta, aby pobrać pola z danej instancji Date.
źródło
Z Javadoc dla Date.getHours
As of JDK version 1.1, replaced by Calendar.get(Calendar.HOUR_OF_DAY)
Więc użyj
i odpowiednik dla getMinutes.
źródło
ZonedDateTime
zamiast tego.java.time
Chociaż jestem fanem Joda-Time , Java 8 wprowadza pakiet java.time , który jest wreszcie wartościowym standardowym rozwiązaniem Java! Przeczytaj ten artykuł, Java SE 8 Date and Time , aby uzyskać dużo informacji na temat java.time poza godzinami i minutami.
W szczególności spójrz na
LocalDateTime
klasę.Godziny i minuty:
źródło
LocalDateTime.now(ZoneId.of("Asia/Manilla"))
. Czytajnow()
tylko raz, aby zachować spójność (między dwoma wywołaniami upłynie czas). Jeśli data jest naprawdę nieistotna,LocalTime
też działa.ZonedDateTime
klasy zamiastLocalDateTime
. DziękiLocalDateTime
Tobie bez powodu odrzucasz cenne informacje o strefie czasowej, nic nie zyskując.Najpierw zaimportuj java.util.Calendar
źródło
tl; dr
… Lub…
ZonedDateTime
Odpowiedz przez JD jest dobra, ale nie optymalne. Ta odpowiedź używa
LocalDateTime
klasy. Bez jakiejkolwiek koncepcji strefy czasowej lub przesunięcia w stosunku do UTC, ta klasa nie może reprezentować momentu.Lepiej używać
ZonedDateTime
.Określ strefę czasową
Jeśli pominiesz
ZoneId
argument, zostanie on zastosowany niejawnie w czasie wykonywania przy użyciu bieżącej domyślnej strefy czasowej maszyny JVM.Więc to:
… Jest taki sam jak ten:
Lepiej jest podać konkretną / oczekiwaną strefę czasową. Wartość domyślna może ulec zmianie w dowolnym momencie podczas działania.
Jeśli jest to krytyczne, potwierdź strefę czasową z użytkownikiem.
Godzina-minuta
Zapytaj
ZonedDateTime
o godzinę i minutę.LocalTime
Jeśli chcesz podać tylko porę dnia bez strefy czasowej, wyodrębnij
LocalTime
.Lub
ZonedDateTime
całkowicie pomiń , przechodząc bezpośrednio doLocalTime
.typy java.time
Informacje o java.time
Struktura java.time jest wbudowana w Javę 8 i nowsze. Klasy te kłopotliwe zastąpić stary starszych klas Date-Time, takich jak
java.util.Date
,Calendar
, iSimpleDateFormat
.Aby dowiedzieć się więcej, zobacz samouczek Oracle . I przeszukaj Stack Overflow, aby znaleźć wiele przykładów i wyjaśnień. Specyfikacja to JSR 310 .
Projekt Joda-Time , obecnie w trybie konserwacji , zaleca migrację do klas java.time .
Możesz wymieniać obiekty java.time bezpośrednio ze swoją bazą danych. Użyj sterownika JDBC zgodnego z JDBC 4.2 lub nowszym. Nie ma potrzeby stosowania ciągów ani
java.sql.*
klas.Skąd wziąć klasy java.time?
Projekt ThreeTen-Extra rozszerza java.time o dodatkowe klasy. Ten projekt jest poligonem doświadczalnym dla ewentualnych przyszłych dodatków do java.time. Można znaleźć kilka przydatnych klas tutaj takie jak
Interval
,YearWeek
,YearQuarter
, i więcej .źródło
Wypróbuj Calender. Użyj getInstance, aby uzyskać obiekt kalendarza. Następnie użyj setTime, aby ustawić wymaganą datę. Teraz możesz użyć get (pole int) z odpowiednią stałą, taką jak HOUR_OF_DAY lub coś podobnego, aby odczytać potrzebne wartości.
http://java.sun.com/javase/6/docs/api/java/util/Calendar.html
źródło
Te funkcje będą zwracać wartości int w godzinach i minutach.
źródło
java.sql.Time
? Z pewnością nie ma żadnego powodu, aby wprowadzać do gry tę przestarzałą klasę, kiedy już maszjava.time.LocalTime
. Zbytnie komplikujesz.getMinutes()
że został wycofany w (używam Java 1.8) i został zastąpiony przezCalendar.get(Calendar.MINUTE)
Jeszcze jednym sposobem uzyskiwania minut i godzin jest użycie SimpleDateFormat.
źródło
java.util.Date
,java.util.Calendar
ijava.text.SimpleDateFormat
są teraz starsze , zastąpione przez klasy java.time wbudowane w Javę 8 i nowsze. Zobacz samouczek firmy Oracle .Poleciłbym poszukać czasu ad joda. http://www.joda.org/joda-time/
Bałem się dodać kolejną bibliotekę do mojego grubego projektu, ale jest to po prostu łatwe, szybkie, inteligentne i niesamowite. Ponadto do pewnego stopnia dobrze współgra z istniejącym kodem.
źródło
Chociaż nie polecałbym tego robić, myślę, że warto zauważyć, że chociaż wiele metod w java.util.Date zostało przestarzałych, nadal działają. W trywialnych sytuacjach ich użycie może być w porządku. Ponadto java.util.Calendar działa dość wolno, więc getMonth i getYear on Date mogą być pożyteczne szybciej.
źródło
To działa dla mnie
źródło
import java.util.*
Możesz uzyskać godziny i minuty, używając kalendarza i klasy formatera.Calendar cal = Calendar.getInstance()
iFormatter fmt=new Formatter()
ustawić format wyświetlania godzin i minutfmt.format("%tl:%M",cal,cal)
oraz wydrukówSystem.out.println(fmt)
, takich jak10:12
źródło