Je dois régler l'heure sur la date actuelle. La chaîne de temps est toujours au format 24 heures mais le résultat obtenu est faux:
SimpleDateFormat df = new SimpleDateFormat("kk:mm");
Date d1 = df.parse("10:30");
Calendar c1 = Calendar.getInstance();
c1.set(Calendar.HOUR, d1.getHours());
c1.set(Calendar.MINUTE, d1.getMinutes());
La date doit être la date du jour et l'heure fixée à 10h30. Au lieu de cela, le temps en c1 finit par être 22h30. Comment puis-je forcer le contrôle du calendrier à reconnaître que mon heure est au format 24 heures?
EDIT: Si je fais juste cela:
Calendar c1 = Calendar.getInstance();
c1.set(Calendar.HOUR, 10);
c1.set(Calendar.MINUTE, 30);
Cela me donne le même résultat. Pourquoi?
Remplacez ceci:
c1.set(Calendar.HOUR, d1.getHours());
avec ça:
c1.set(Calendar.HOUR_OF_DAY, d1.getHours());
Calendar.HOUR est strictement pour 12 heures.
utilisez SimpleDateFormat df = new SimpleDateFormat("HH:mm");
à la place
METTRE À JOUR
@Ingo a raison. Il vaut mieux utiliser setTime(d1);
la première méthode getHours()
et getMinutes()
est maintenant obsolète
Je teste ce code
SimpleDateFormat df = new SimpleDateFormat("hh:mm");
Date d1 = df.parse("23:30");
Calendar c1 = GregorianCalendar.getInstance();
c1.setTime(d1);
System.out.println(c1.getTime());
et la sortie est ok Thu Jan 01 23:30:00 FET 1970
essaye ça
SimpleDateFormat df = new SimpleDateFormat("KK:mm aa");
Date d1 = df.parse("10:30 PM");
Calendar c1 = GregorianCalendar.getInstance(Locale.US);
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
c1.setTime(d1);
String str = sdf.format(c1.getTime());
System.out.println(str);
Vous pouvez configurer le calendrier pour qu’il utilise uniquement AM ou PM à
calendar.set (Calendar.AM_PM, int);
0 = AM
1 = PM
J'espère que cela t'aides
void privé setClock () {
Timeline clock = new Timeline(new KeyFrame(Duration.ZERO, e -> {
Calendar cal = Calendar.getInstance();
int second = cal.get(Calendar.SECOND);
int minute = cal.get(Calendar.MINUTE);
int hour = cal.get(Calendar.HOUR_OF_DAY);
eski_minut = minute;
if(second < 10){
time_label.setText(hour + ":" + (minute) + ":0" + second);
}else if (minute < 10){
time_label.setText(hour + ":0" + (minute) + ":0" + second);
}
else {
time_label.setText(hour + ":" + (minute) + ":" + second);}
}),
new KeyFrame(Duration.seconds(1))
);
clock.setCycleCount(Animation.INDEFINITE);
clock.play();
}
J'ai récemment utilisé le calendrier complet de mon projet. Je ne sais pas quel effet de vue vous souhaitez obtenir. Dans mon projet, je souhaite modifier la vue de l'heure de l'événement à partir du format 12h
au format 24h.
Si tel est l'effet que vous souhaitez obtenir, la solution ci-dessous peut vous aider:
set timeFormat: 'H:mm'
Ici, vous aurez toutes sortes de problèmes liés au temps. J'espère que cela résoudra votre problème.
public class MyClass {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
// To get the current hour
int hour = cal.get(Calendar.HOUR_OF_DAY);
System.out.println("hour: " + hour);
// To get the current time in 12 hours format
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm a",Locale.US);
String a = sdf.format(cal.getTime());
System.out.println("Time: " + a);
// To get the desired time in 12 hours format from 23 hours format
cal.set(Calendar.HOUR_OF_DAY, 24);
SimpleDateFormat sdf1 = new SimpleDateFormat("hh:mm a",Locale.ENGLISH);
String a1 = sdf1.format(cal.getTime());
System.out.println("Time: " + a1);
/* H Hour in day (0-23)
k Hour in day (1-24)
*/
//To get the desired time in 24 hours format as 0-23 or 1-24
cal.set(Calendar.HOUR_OF_DAY, 24);
SimpleDateFormat sdf2 = new SimpleDateFormat("HH:mm",Locale.ENGLISH);
SimpleDateFormat sdf3 = new SimpleDateFormat("kk:mm",Locale.ENGLISH);
String a2 = sdf2.format(cal.getTime());
String a3 = sdf3.format(cal.getTime());
System.out.println("Time: " + a2);
System.out.println("Time: " + a3);
//For example, time like 12:30 PM. How can i convert to 24 hours time in java?
SimpleDateFormat bigFormat = new SimpleDateFormat("kk:mm");
SimpleDateFormat smallFormat = new SimpleDateFormat("hh:mm a");
Date date = null;
try {
date = smallFormat.parse("12:30 AM");
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(smallFormat.format(date) + " = " + bigFormat.format(date));
}
}
Essaye ça :
SimpleDateFormat df = new SimpleDateFormat("hh:mm");
Ou
SimpleDateFormat df = new SimpleDateFormat("KK:mm");
Référence: SimpleDateFormat
LocalTime.parse( "10:30" ) // Parsed as 24-hour time.
Évitez les anciennes classes de date-heure problématiques telles que Date
et Calendar
qui sont maintenant remplacées par les classes Java.time.
LocalTime
Les classes Java.time permettent de représenter l'heure du jour sans date ni fuseau horaire: LocalTime
LocalTime lt = LocalTime.of( 10 , 30 ); // 10:30 AM.
LocalTime lt = LocalTime.of( 22 , 30 ); // 22:30 is 10:30 PM.
Les classes Java.time utilisent par défaut les formats standard ISO 8601 lors de la génération et de l'analyse de chaînes. Ces formats utilisent le temps de 24 heures.
String output = lt.toString();
Heure locale (10, 30) .toString (): 10h30
Heure locale (22, 30) .toString (): 22h30
Donc, l'analyse 10:30
sera interprétée comme étant 10h30.
LocalTime lt = LocalTime.parse( "10:30" ); // 10:30 AM.
DateTimeFormatter
Si vous devez générer ou analyser des chaînes au format clic 12 heures avec AM/PM, utilisez la classe DateTimeFormatter
. Conseil: prenez l’habitude de spécifier une Locale
.