Come si ottengono ore e minuti da quando Date.getHours
e sono Date.getMinutes
stati deprecati? Gli esempi che ho trovato sulla ricerca di Google hanno utilizzato i metodi obsoleti.
Come si ottengono ore e minuti da quando Date.getHours
e sono Date.getMinutes
stati deprecati? Gli esempi che ho trovato sulla ricerca di Google hanno utilizzato i metodi obsoleti.
Risposte:
Prova a utilizzare Joda Time anziché le classi standard java.util.Date. La libreria Joda Time ha API molto migliori per la gestione delle date.
DateTime dt = new DateTime(); // current time
int month = dt.getMonth(); // gets the current month
int hours = dt.getHourOfDay(); // gets hour of day
Vedi questa domanda per pro e contro dell'utilizzo della libreria Joda Time.
Joda Time potrebbe anche essere incluso in alcune versioni future di Java come componente standard, vedere JSR-310 .
Se è necessario utilizzare le classi java.util.Date e java.util.Calendar tradizionali, consultare i relativi JavaDoc ( java.util.Calendar e java.util.Date ).
È possibile utilizzare le classi tradizionali in questo modo per recuperare i campi da una determinata istanza di Date.
Date date = new Date(); // given date
Calendar 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!
Da Javadoc per Date.getHours
As of JDK version 1.1, replaced by Calendar.get(Calendar.HOUR_OF_DAY)
Quindi usa
Calendar rightNow = Calendar.getInstance();
int hour = rightNow.get(Calendar.HOUR_OF_DAY);
e l'equivalente per getMinutes.
ZonedDateTime
invece.
Mentre sono un fan di Joda-Time , Java 8 introduce il pacchetto java.time che è finalmente una soluzione standard Java utile! Leggi questo articolo, Java SE 8 Date and Time , per una buona quantità di informazioni su java.time al di fuori di ore e minuti.
In particolare, guarda la LocalDateTime
classe.
Ore e minuti:
LocalDateTime.now().getHour();
LocalDateTime.now().getMinute();
LocalDateTime.now(ZoneId.of("Asia/Manilla"))
. Leggere now()
solo una volta per coerenza (il tempo passerà tra le due chiamate). Se la data è davvero irrilevante, LocalTime
funziona anche.
ZonedDateTime
classe piuttosto che LocalDateTime
. Con LocalDateTime
te stai eliminando preziose informazioni sul fuso orario senza motivo, senza ottenere nulla.
ZonedDateTime.now().getHour()
… o …
LocalTime.now().getHour()
ZonedDateTime
La risposta di JD è buona ma non ottimale. Quella risposta usa la LocalDateTime
classe. Mancando di qualsiasi concetto di fuso orario o offset da UTC, quella classe non può rappresentare un momento.
Meglio usare ZonedDateTime
.
ZoneId z = ZoneID.of( "America/Montreal" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;
Se si omette l' ZoneId
argomento, uno viene applicato implicitamente in fase di esecuzione utilizzando il fuso orario predefinito corrente della JVM.
Così questo:
ZonedDateTime.now()
... è uguale a questo:
ZonedDateTime.now( ZoneId.systemDefault() )
Meglio essere espliciti, passando il fuso orario desiderato / previsto. L'impostazione predefinita può cambiare in qualsiasi momento durante il runtime.
Se critico, confermare il fuso orario con l'utente.
Interroga il ZonedDateTime
per l'ora e il minuto.
int hour = zdt.getHour() ;
int minute = zdt.getMinute() ;
LocalTime
Se si desidera solo l'ora del giorno senza il fuso orario, estrarre LocalTime
.
LocalTime lt = zdt.toLocalTime() ;
O salta del ZonedDateTime
tutto, andando direttamente a 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).
Il framework java.time è integrato in Java 8 e versioni successive. Queste classi soppiantare la vecchia fastidiosi legacy classi data-time come java.util.Date
, Calendar
, e SimpleDateFormat
.
Per saperne di più, consulta il tutorial Oracle . E cerca Stack Overflow per molti esempi e spiegazioni. La specifica è JSR 310 .
Il progetto Joda-Time , ora in modalità manutenzione , consiglia la migrazione alle classi java.time .
Puoi scambiare oggetti java.time direttamente con il tuo database. Utilizzare un driver JDBC conforme a JDBC 4.2 o successivo. Nessuna necessità di stringhe, nessuna necessità di java.sql.*
classi.
Dove ottenere le classi java.time?
Il progetto ThreeTen-Extra estende java.time con classi aggiuntive. Questo progetto è un banco di prova per possibili aggiunte future a java.time. Si possono trovare alcune classi utili, come per esempio Interval
, YearWeek
, YearQuarter
e altro .
Prova il calendario. Usa getInstance per ottenere un oggetto calendario. Quindi utilizzare setTime per impostare la data richiesta. Ora puoi usare get (campo int) con la costante appropriata come HOUR_OF_DAY o giù di lì per leggere i valori che ti servono.
http://java.sun.com/javase/6/docs/api/java/util/Calendar.html
int hr=Time.valueOf(LocalTime.now()).getHours();
int minutes=Time.valueOf(LocalTime.now()).getMinutes();
Queste funzioni restituiranno valori int in ore e minuti.
java.sql.Time
? Certamente non c'è motivo di mettere in gioco quella classe obsoleta quando ce l'hai java.time.LocalTime
. Sei troppo complicato.
getMinutes()
sia stato deprecato in (sto usando Java 1.8) ed è stato sostituito conCalendar.get(Calendar.MINUTE)
Un altro modo per ottenere minuti e ore è utilizzare SimpleDateFormat.
SimpleDateFormat formatMinutes = new SimpleDateFormat("mm")
String getMinutes = formatMinutes.format(new Date())
SimpleDateFormat formatHours = new SimpleDateFormat("HH")
String getHours = formatHours.format(new Date())
java.util.Date
, java.util.Calendar
e java.text.SimpleDateFormat
sono ormai legacy , soppiantate dalle classi java.time integrate in Java 8 e versioni successive. Vedi Tutorial di Oracle .
Consiglierei di cercare ad joda time. http://www.joda.org/joda-time/
Avevo paura di aggiungere un'altra libreria al mio grosso progetto, ma è semplice, veloce, intelligente e fantastico. Inoltre, gioca bene con il codice esistente, in una certa misura.
Anche se non consiglierei di farlo, penso che valga la pena sottolineare che, sebbene molti metodi su java.util.Date siano stati deprecati, funzionano ancora. In situazioni banali, potrebbe essere OK usarli. Inoltre, java.util.Calendar è piuttosto lento, quindi getMonth e getYear alla data potrebbero essere utilmente più veloci.
import java.util.*
Puoi ottenere ore e minuti usando il calendario e la classe di formattazione. Calendar cal = Calendar.getInstance()
e Formatter fmt=new Formatter()
impostare un formato per visualizzare l'ora e i minuti fmt.format("%tl:%M",cal,cal)
e l' System.out.println(fmt)
output di stampa mostra come10:12
java.util.Date
,java.util.Calendar
ejava.text.SimpleDateFormat
sono ormai legacy , soppiantate dalle classi java.time integrate in Java 8 e versioni successive. Vedi Tutorial di Oracle .