it-swarm.com.de

Einstellen der Uhrzeit auf das 24-Stunden-Format im Kalender

Ich muss die Uhrzeit auf das aktuelle Datum einstellen. Die Zeitzeichenfolge ist immer im 24-Stunden-Format, aber das Ergebnis, das ich bekomme, ist falsch:

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

Das Datum sollte das heutige Datum und die Uhrzeit 10:30 sein. Stattdessen endet die Zeit in c1 um 22:30 Uhr. Wie kann ich erzwingen, dass die Kalendersteuerung meine Uhrzeit im 24-Stunden-Format erkennt?

EDIT: Wenn ich das einfach mache:

Calendar c1 = Calendar.getInstance();
c1.set(Calendar.HOUR, 10);
c1.set(Calendar.MINUTE, 30);

Das gibt mir das gleiche Ergebnis. Warum?

29
AndroidDev

Ersetzen Sie dies:

c1.set(Calendar.HOUR, d1.getHours());

mit diesem:

c1.set(Calendar.HOUR_OF_DAY, d1.getHours());

Calendar.HOUR ist ausschließlich für 12 Stunden.

166
AndroidDev

verwenden Sie stattdessen SimpleDateFormat df = new SimpleDateFormat("HH:mm");

UPDATE

@Ingo ist richtig. ist die bessere Verwendung setTime(d1);

die erste Methode getHours() und getMinutes() ist nun veraltet

Ich teste diesen 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());

und Ausgabe ist ok Thu Jan 01 23:30:00 FET 1970

versuche dies 

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

Sie können den Kalender so einstellen, dass nur AM oder PM verwendet wird

calendar.set (Calendar.AM_PM, int);

0 = AM

1 = PM

Hoffe das hilft

3
Sam Strawbridge

private void 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

wenn Sie in der Funktion SimpleDateFormat ("hh") durch ("HH") ersetzen, wird die Stunde in 24 Stunden statt in 12 Stunden formatiert.

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

Ich benutze kürzlich den Fullcalendar für mein Projekt. Ich weiß nicht, welchen genauen Ansichtseffekt Sie erzielen möchten. In meinem Projekt möchte ich die Ereigniszeitansicht vom 12h-Format aus ändern

 enter image description here

bis 24h Format.

 enter image description here

Wenn dies der gewünschte Effekt ist, kann die folgende Lösung hilfreich sein:

timeFormat: 'H:mm' setzen

1
SkuraZZ

Hier bekommen Sie alle möglichen zeitlichen Probleme. Ich hoffe, das löst dein Problem.

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

Versuche dies :

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

Oder

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

Referenz: SimpleDateFormat

0
Iswanto San

tl; dr

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

Java.time

Vermeiden Sie die störenden alten Datum-Uhrzeit-Klassen wie Date und Calendar, die jetzt durch die Java.time-Klassen ersetzt werden. 

LocalTime

Die Java.time-Klassen bieten eine Möglichkeit, die Uhrzeit ohne Datum und ohne Zeitzone darzustellen: LocalTime

LocalTime lt = LocalTime.of( 10 , 30 );  // 10:30 AM.
LocalTime lt = LocalTime.of( 22 , 30 );  // 22:30 is 10:30 PM.

ISO 8601

Die Java.time-Klassen verwenden standardmäßig Standardformate nach ISO 8601, wenn Sie Strings generieren und analysieren. Diese Formate verwenden 24 Stunden.

String output = lt.toString();

LocalTime.of (10, 30) .toString (): 10:30

LocalTime.of (22, 30) .toString (): 22:30 Uhr

Das Analysieren von 10:30 wird also als 10:30 Uhr interpretiert.

LocalTime lt = LocalTime.parse( "10:30" );  // 10:30 AM.

DateTimeFormatter

Wenn Sie mit AM/PM Zeichenfolgen im 12-Stunden-Klickformat generieren oder analysieren müssen, verwenden Sie die Klasse DateTimeFormatter. Tipp: Machen Sie es sich zur Gewohnheit, eine Locale anzugeben.

0
Basil Bourque