Comment obtenez-vous des heures et des minutes depuis Date.getHourset êtes-vous Date.getMinutesobsolète? Les exemples que j'ai trouvés sur la recherche Google utilisent les méthodes obsolètes.
Essayez d'utiliser Joda Time au lieu des classes java.util.Date standard. La bibliothèque Joda Time a une bien meilleure API pour gérer les dates.
DateTime dt =newDateTime();// current timeint month = dt.getMonth();// gets the current monthint hours = dt.getHourOfDay();// gets hour of day
Consultez cette question pour connaître les avantages et les inconvénients de l'utilisation de la bibliothèque Joda Time.
Joda Time peut également être inclus dans une future version de Java en tant que composant standard, voir JSR-310 .
Si vous devez utiliser les classes traditionnelles java.util.Date et java.util.Calendar, consultez leur JavaDoc pour obtenir de l'aide ( java.util.Calendar et java.util.Date ).
Vous pouvez utiliser les classes traditionnelles comme celle-ci pour récupérer les champs d'une instance de Date donnée.
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!
Cette terrible classe a été supplantée il y a des années par les classes java.time modernes , avec l'adoption de JSR 310. Utilisez à la ZonedDateTimeplace.
Basil Bourque
58
java.time
Bien que je sois fan de Joda-Time , Java 8 présente le package java.time qui est enfin une solution standard Java intéressante! Lisez cet article, Java SE 8 Date et heure , pour une bonne quantité d'informations sur java.time en dehors des heures et des minutes.
C'est la meilleure réponse. Vous pouvez fournir fuseau horaire explicite de rappeler au lecteur et vous que c'est un fuseau horaire opération sensible: LocalDateTime.now(ZoneId.of("Asia/Manilla")). Lire now()une seule fois pour la cohérence (le temps passera entre les deux appels). Si la date est vraiment hors de propos, LocalTimefonctionne aussi.
Ole VV
1
Merci pour ça. J'ai en quelque sorte MANQUÉ ce merveilleux construit en classe pendant longtemps!
chrips
Le commentaire d'Ole VV est correct. Mais mieux encore, utilisez la ZonedDateTimeclasse plutôt que LocalDateTime. Avec LocalDateTimevous, vous supprimez des informations de fuseau horaire précieuses sans raison, sans rien gagner.
Basil Bourque
Utile si vous n'avez pas besoin d'être rétrocompatible. Malheureusement, ne convient pas si vous écrivez pour Android et supportez des versions d'API plus anciennes (ou dans tout autre cas lorsque Java 8 n'est pas toujours disponible).
M_M
@M_M Pour Java 6 & 7, la plupart des fonctionnalités java.time sont back-portées dans la bibliothèque ThreeTen-Backport . Adapté davantage au début d'Android dans ThreeTenABP . Pour les liens, consultez la dernière section de ma réponse .
Basil Bourque
36
Tout d'abord, importez java.util.Calendar
Calendar now =Calendar.getInstance();System.out.println(now.get(Calendar.HOUR_OF_DAY)+":"+ now.get(Calendar.MINUTE));
La réponse de JD est bonne mais pas optimale. Cette réponse utilise la LocalDateTimeclasse. N'ayant aucun concept de fuseau horaire ou de décalage par rapport à UTC, cette classe ne peut pas représenter un moment.
ZoneId z =ZoneID.of("America/Montreal");ZonedDateTime zdt =ZonedDateTime.now( z );
Spécifiez le fuseau horaire
Si vous omettez l' ZoneIdargument, l'un est appliqué implicitement au moment de l'exécution en utilisant le fuseau horaire par défaut actuel de la JVM.
Donc ça:
ZonedDateTime.now()
… Est la même chose:
ZonedDateTime.now(ZoneId.systemDefault())
Mieux vaut être explicite, en passant votre fuseau horaire souhaité / attendu. La valeur par défaut peut changer à tout moment pendant l'exécution.
S'il est critique, confirmez le fuseau horaire avec l'utilisateur.
Heure-minute
Interrogez le ZonedDateTimepour l'heure et la minute.
int hour = zdt.getHour();int minute = zdt.getMinute();
LocalTime
Si vous voulez juste l'heure du jour sans le fuseau horaire, extrayez LocalTime.
LocalTime lt = zdt.toLocalTime();
Ou passez ZonedDateTimeentièrement à 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).
Pour en savoir plus, consultez le didacticiel Oracle . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310 .
Vous pouvez échanger des objets java.time directement avec votre base de données. Utilisez un pilote JDBC compatible avec JDBC 4.2 ou version ultérieure. Pas besoin de cordes, pas besoin dejava.sql.* classes.
Le projet ThreeTen-Extra étend java.time avec des classes supplémentaires. Ce projet est un terrain d'essai pour d'éventuels futurs ajouts à java.time. Vous trouverez peut - être des classes utiles ici, comme Interval, YearWeek, YearQuarteret plus .
Essayez Calender. Utilisez getInstance pour obtenir un Calender-Object. Utilisez ensuite setTime pour définir la date requise. Vous pouvez maintenant utiliser get (int field) avec la constante appropriée comme HOUR_OF_DAY ou plus pour lire les valeurs dont vous avez besoin.
Dupliquer. Cette approche était déjà couverte dans la réponse de JD .
Basil Bourque
C'est ça java.sql.Time? Certainement aucune raison de mettre en jeu cette classe obsolète quand vous en avez java.time.LocalTime. Vous compliquez trop.
Ole VV
Il semble que cela getMinutes()a été obsolète dans (j'utilise java 1.8) et a été remplacé parCalendar.get(Calendar.MINUTE)
Saltz3
3
Une autre façon d'obtenir des minutes et des heures consiste à utiliser SimpleDateFormat.
J'avais peur d'ajouter une autre bibliothèque à mon projet épais, mais c'est juste facile et rapide et intelligent et génial. De plus, il joue bien avec le code existant, dans une certaine mesure.
Bien que je ne le recommande pas, je pense qu'il vaut la peine de souligner que bien que de nombreuses méthodes sur java.util.Date soient obsolètes, elles fonctionnent toujours. Dans des situations triviales, il peut être acceptable de les utiliser. De plus, java.util.Calendar est assez lent, donc getMonth et getYear on Date pourraient être utilement plus rapides.
import java.util.*Vous pouvez obtenir l'heure et les minutes en utilisant le calendrier et la classe de formateur. Calendar cal = Calendar.getInstance()et Formatter fmt=new Formatter()et définissez un format pour l'affichage des heures et des minutes fmt.format("%tl:%M",cal,cal)et la System.out.println(fmt) sortie d' impression montre comme10:12
java.util.Date
,java.util.Calendar
etjava.text.SimpleDateFormat
sont maintenant héritées , supplantées par les classes java.time intégrées à Java 8 et versions ultérieures. Voir le didacticiel d'Oracle .Réponses:
Essayez d'utiliser Joda Time au lieu des classes java.util.Date standard. La bibliothèque Joda Time a une bien meilleure API pour gérer les dates.
Consultez cette question pour connaître les avantages et les inconvénients de l'utilisation de la bibliothèque Joda Time.
Joda Time peut également être inclus dans une future version de Java en tant que composant standard, voir JSR-310 .
Si vous devez utiliser les classes traditionnelles java.util.Date et java.util.Calendar, consultez leur JavaDoc pour obtenir de l'aide ( java.util.Calendar et java.util.Date ).
Vous pouvez utiliser les classes traditionnelles comme celle-ci pour récupérer les champs d'une instance de Date donnée.
la source
Depuis la Javadoc pour Date.getHours
As of JDK version 1.1, replaced by Calendar.get(Calendar.HOUR_OF_DAY)
Alors utilisez
et l'équivalent pour getMinutes.
la source
ZonedDateTime
place.java.time
Bien que je sois fan de Joda-Time , Java 8 présente le package java.time qui est enfin une solution standard Java intéressante! Lisez cet article, Java SE 8 Date et heure , pour une bonne quantité d'informations sur java.time en dehors des heures et des minutes.
En particulier, regardez la
LocalDateTime
classe.Heures et minutes:
la source
LocalDateTime.now(ZoneId.of("Asia/Manilla"))
. Lirenow()
une seule fois pour la cohérence (le temps passera entre les deux appels). Si la date est vraiment hors de propos,LocalTime
fonctionne aussi.ZonedDateTime
classe plutôt queLocalDateTime
. AvecLocalDateTime
vous, vous supprimez des informations de fuseau horaire précieuses sans raison, sans rien gagner.Tout d'abord, importez java.util.Calendar
la source
tl; dr
… ou …
ZonedDateTime
La réponse de JD est bonne mais pas optimale. Cette réponse utilise la
LocalDateTime
classe. N'ayant aucun concept de fuseau horaire ou de décalage par rapport à UTC, cette classe ne peut pas représenter un moment.Mieux vaut utiliser
ZonedDateTime
.Spécifiez le fuseau horaire
Si vous omettez l'
ZoneId
argument, l'un est appliqué implicitement au moment de l'exécution en utilisant le fuseau horaire par défaut actuel de la JVM.Donc ça:
… Est la même chose:
Mieux vaut être explicite, en passant votre fuseau horaire souhaité / attendu. La valeur par défaut peut changer à tout moment pendant l'exécution.
S'il est critique, confirmez le fuseau horaire avec l'utilisateur.
Heure-minute
Interrogez le
ZonedDateTime
pour l'heure et la minute.LocalTime
Si vous voulez juste l'heure du jour sans le fuseau horaire, extrayez
LocalTime
.Ou passez
ZonedDateTime
entièrement àLocalTime
.types java.time
À propos java.time
Le framework java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciens gênants hérités des classes date-heure tels que
java.util.Date
,Calendar
, &SimpleDateFormat
.Pour en savoir plus, consultez le didacticiel Oracle . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310 .
Le projet Joda-Time , désormais en mode maintenance , conseille de migrer vers java.time classes .
Vous pouvez échanger des objets java.time directement avec votre base de données. Utilisez un pilote JDBC compatible avec JDBC 4.2 ou version ultérieure. Pas besoin de cordes, pas besoin de
java.sql.*
classes.Où obtenir les classes java.time?
Le projet ThreeTen-Extra étend java.time avec des classes supplémentaires. Ce projet est un terrain d'essai pour d'éventuels futurs ajouts à java.time. Vous trouverez peut - être des classes utiles ici, comme
Interval
,YearWeek
,YearQuarter
et plus .la source
Essayez Calender. Utilisez getInstance pour obtenir un Calender-Object. Utilisez ensuite setTime pour définir la date requise. Vous pouvez maintenant utiliser get (int field) avec la constante appropriée comme HOUR_OF_DAY ou plus pour lire les valeurs dont vous avez besoin.
http://java.sun.com/javase/6/docs/api/java/util/Calendar.html
la source
Ces fonctions renverront des valeurs int en heures et minutes.
la source
java.sql.Time
? Certainement aucune raison de mettre en jeu cette classe obsolète quand vous en avezjava.time.LocalTime
. Vous compliquez trop.getMinutes()
a été obsolète dans (j'utilise java 1.8) et a été remplacé parCalendar.get(Calendar.MINUTE)
Une autre façon d'obtenir des minutes et des heures consiste à utiliser SimpleDateFormat.
la source
java.util.Date
,java.util.Calendar
etjava.text.SimpleDateFormat
sont maintenant héritées , supplantées par les classes java.time intégrées à Java 8 et versions ultérieures. Voir le didacticiel d'Oracle .Je recommanderais de regarder ad joda time. http://www.joda.org/joda-time/
J'avais peur d'ajouter une autre bibliothèque à mon projet épais, mais c'est juste facile et rapide et intelligent et génial. De plus, il joue bien avec le code existant, dans une certaine mesure.
la source
Bien que je ne le recommande pas, je pense qu'il vaut la peine de souligner que bien que de nombreuses méthodes sur java.util.Date soient obsolètes, elles fonctionnent toujours. Dans des situations triviales, il peut être acceptable de les utiliser. De plus, java.util.Calendar est assez lent, donc getMonth et getYear on Date pourraient être utilement plus rapides.
la source
Cela fonctionne pour moi
la source
import java.util.*
Vous pouvez obtenir l'heure et les minutes en utilisant le calendrier et la classe de formateur.Calendar cal = Calendar.getInstance()
etFormatter fmt=new Formatter()
et définissez un format pour l'affichage des heures et des minutesfmt.format("%tl:%M",cal,cal)
et laSystem.out.println(fmt)
sortie d' impression montre comme10:12
la source