web-dev-qa-db-fra.com

Comment définir l'heure au format 24 heures dans le calendrier

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?

29
AndroidDev

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.

166
AndroidDev

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);
7
Aleksei Bulgak

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

3
Sam Strawbridge

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();
}
1
Azamat Toshtemirov

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

 enter image description here

au format 24h.

 enter image description here

Si tel est l'effet que vous souhaitez obtenir, la solution ci-dessous peut vous aider:

set timeFormat: 'H:mm'

1
SkuraZZ

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));

    }

}
0
Satyajit Barman

Essaye ça :

SimpleDateFormat df = new SimpleDateFormat("hh:mm");

Ou

SimpleDateFormat df = new SimpleDateFormat("KK:mm");

Référence: SimpleDateFormat

0
Iswanto San

tl; dr

LocalTime.parse( "10:30" )  // Parsed as 24-hour time.

Java.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.

ISO 8601

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.

0
Basil Bourque