Anzeige der aktuellen Uhrzeit im 12-Stunden-Format mit AM / PM


183

Aktuell angezeigte Zeit als 13.35 Uhr jedoch ich will mit AM / PM, also 13.35 statt 13.35 Uhr zu 12 - Stunden - Format angezeigt werden

Der aktuelle Code lautet wie folgt

private static final int FOR_HOURS = 3600000;
private static final int FOR_MIN = 60000;
public String getTime(final Model model) {
    SimpleDateFormat formatDate = new SimpleDateFormat("HH:mm a");
    formatDate.setTimeZone(userContext.getUser().getTimeZone());
    model.addAttribute("userCurrentTime", formatDate.format(new Date()));
    final String offsetHours = String.format("%+03d:%02d", userContext.getUser().getTimeZone().getRawOffset()
    / FOR_HOURS, Math.abs(userContext.getUser().getTimeZone().getRawOffset() % FOR_HOURS / FOR_MIN));
    model.addAttribute("offsetHours",
                offsetHours + " " + userContext.getUser().getTimeZone().getDisplayName(Locale.ROOT));
    return "systemclock";
}

7
Versuchen SieSimpleDateFormat formatDate = new SimpleDateFormat("hh:mm a");
Tarsem Singh

1
Die obige Frage wurde im Jahr 2013 gestellt und die, die Sie 2014 erwähnt haben. Wie kann diese obige Frage das Duplikat der schnellen Frage sein
?

4
@ J-Dizzle Wie kann eine Java-Frage ein Duplikat einer Swift-Frage sein?
Mark Rotteveel

Entschuldigen Sie, Sie haben Recht!
J-Dizzle

Antworten:


451

Der einfachste Weg, es mit Datumsmuster zu bekommen - h:mm a, wo

  • h - Stunde in morgens / abends (1-12)
  • m - Minute in Stunde
  • a - Am / pm-Marker

Code-Auszug :

DateFormat dateFormat = new SimpleDateFormat("hh:mm a");

Lesen Sie mehr zur Dokumentation - SimpleDateFormat Java 7


61
Beachten Sie, dass die Verwendung von zwei h ("hh") eine führende Null ergibt (dh 01:23 Uhr). Ein "h" gibt Ihnen die Stunde ohne die führende Null (01:23 Uhr).
Ben Jakuben

9
Wie bekomme ich AM & PM anstelle von 'bin' & 'p.m'
akash bs

@akashbs Ich denke, es gibt keinen einfachen Weg, aber Sie können etwas versuchen wie: Rufen Sie in Ihrer vollständigen Datumszeichenfolge die Teilzeichenfolge von (Länge - 4) bis (Länge -1) auf und speichern Sie sie in einem variablen_original. Erstellen Sie dann eine neue variable_modifizierte, die verwendet wird Die erste erstellte Variable_original ersetzt ".m" durch "m". Rufen Sie dann die Methode toUpperCase auf, nachdem Sie zu Ihrer vollständigen Datumszeichenfolge zurückgekehrt sind, und rufen Sie replace (variable_original, variable_modified) auf.
Dadurch

@akashbs Aber Sie können Einheimische verwenden, jeder Einheimische verwendet unterschiedliche Datumsformate. Ich glaube, mit dem US-Einheimischen können Sie auch das erreichen, wonach Sie suchen
Tamim Attafi

@akashbs Weitere Informationen finden Sie in den folgenden Dokumenten: developer.android.com/reference/java/text/SimpleDateFormat
Tamim Attafi


63

verwenden "hh:mm a"statt "HH:mm a". Hier hhfür das 12-Stunden-Format und HHfür das 24-Stunden-Format.

Live- Demo


Danke @RuchiraGayanRanaweei ... ich frage mich nur, ob ich das 24-Format erfassen und in das AM / PM-Format konvertieren soll ...
gumuruh

Das ist wichtig. Ich hatte gerade einen Fall, in dem "18.11.2016, 17:28 Uhr" in "2016-11-18T05: 28: 00" anstelle von "2016-11-18T17: 28: 00" konvertiert wurde, weil ich den falschen Stundenplatzhalter verwendet habe. Vielen Dank!
Kekzpanda

20
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yy hh.mm.ss.S aa");
String formattedDate = dateFormat.format(new Date()).toString();
System.out.println(formattedDate);

Ausgabe: 11-Sep-13 12.25.15.375 PM


17
SimpleDateFormat formatDate = new SimpleDateFormat("hh:mm:ss a");
  • h wird für AM / PM-Zeiten (1-12) verwendet.

  • H wird 24 Stunden lang verwendet (1-24).

  • a ist der AM / PM-Marker

  • m ist Minute in Stunde

Hinweis: Zwei Stunden drucken eine führende Null: 13:13 Uhr. Eine Stunde wird ohne die führende Null gedruckt: 13:13 Uhr.

Sieht so aus, als hätten mich im Grunde alle schon geschlagen, aber ich schweife ab


11
// hh:mm will print hours in 12hrs clock and mins (e.g. 02:30)
System.out.println(DateTimeFormatter.ofPattern("hh:mm").format(LocalTime.now()));

// HH:mm will print hours in 24hrs clock and mins (e.g. 14:30)
System.out.println(DateTimeFormatter.ofPattern("HH:mm").format(LocalTime.now())); 

// hh:mm a will print hours in 12hrs clock, mins and AM/PM (e.g. 02:30 PM)
System.out.println(DateTimeFormatter.ofPattern("hh:mm a").format(LocalTime.now())); 

Nun, dies ist die beste Antwort, die ich hier gefunden habe, danke
Martin Volek

7

Verwenden von Java 8:

LocalTime localTime = LocalTime.now();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("hh:mm a");
System.out.println(localTime.format(dateTimeFormatter));

Die Ausgabe erfolgt im AM/PMFormat.

Sample output:  3:00 PM

Geben Sie a Localean, indem Sie withLocaledieses Formatierungsobjekt aufrufen , um die menschliche Sprache und die kulturellen Normen zu bestimmen, die beim Generieren des AM/ PMtext verwendet werden sollen.
Basil Bourque

5

Ersetzen Sie einfach die folgende Anweisung und es wird funktionieren.

SimpleDateFormat formatDate = new SimpleDateFormat("hh:mm a");

3

Wenn Sie die aktuelle Uhrzeit mit AM, PM in Android verwenden möchten

String time = new SimpleDateFormat("hh : mm a", Locale.getDefault()).format(Calendar.getInstance().getTime());

Wenn Sie die aktuelle Zeit mit morgens, abends möchten

String time = new SimpleDateFormat("hh : mm a", Locale.getDefault()).format(Calendar.getInstance().getTime()).toLowerCase();

ODER

Ab API-Ebene 26

LocalTime localTime = LocalTime.now();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("hh:mm a");
String time = localTime.format(dateTimeFormatter);

2
Bitte bringen Sie den Jungen 2019 nicht bei, die lange veraltete und notorisch problematische SimpleDateFormatKlasse zu benutzen . Zumindest nicht als erste Option. Und das nicht ohne Vorbehalt. Heute haben wir java.timedie moderne Java-API für Datum und Uhrzeit und ihre DateTimeFormatter.
Ole VV

1
Vielen Dank. Die moderne Antwort kann auch auf niedrigen API-Ebenen verwendet werden, wenn Sie Ihrem Android-Projekt ThreeTenABP , den Backport von java.time, hinzufügen . Siehe Verwendung von ThreeTenABP in Android Project (für eine einfache Aufgabe wie diese ist der Wert möglicherweise umstritten, aber für etwas mehr Datums- und Zeitarbeit empfehle ich ihn).
Ole VV

Da AM und PM kaum in anderen Sprachen als Englisch verwendet werden, würde ich wahrscheinlich DateTimeFormatter.ofPattern("hh:mm a", Locale.ENGLISH)(oder ein anderes englischsprachiges Gebietsschema) verwenden.
Ole VV

2
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm a");

Dies zeigt Datum und Uhrzeit an


2
    //To get Filename + date and time


    SimpleDateFormat f = new SimpleDateFormat("MMM");
    SimpleDateFormat f1 = new SimpleDateFormat("dd");
    SimpleDateFormat f2 = new SimpleDateFormat("a");

    int h;
         if(Calendar.getInstance().get(Calendar.HOUR)==0)
            h=12;
         else
            h=Calendar.getInstance().get(Calendar.HOUR)

    String filename="TestReport"+f1.format(new Date())+f.format(new Date())+h+f2.format(new Date())+".txt";


The Output Like:TestReport27Apr3PM.txt

Viel zu kompliziert und nicht intuitiv. Wenn Sie das veraltete SimpleDateFormat verwenden müssen, müssen Sie mindestens alles in einem Aufruf zusammenfassen. Erklären Sie auch, warum Sie 12 anstelle der tatsächlichen Stunde von Mitternacht bis 1 verwenden. Außerdem hat niemand nach Dateinamen gefragt.
Robert

2

tl; dr

Lassen Sie die modernen java.time- Klassen von JSR 310 automatisch lokalisierten Text generieren, anstatt die 12-Stunden-Uhr und AM / PM fest zu codieren.

LocalTime                                     // Represent a time-of-day, without date, without time zone or offset-from-UTC.
.now(                                         // Capture the current time-of-day as seen in a particular time zone.
    ZoneId.of( "Africa/Casablanca" )          
)                                             // Returns a `LocalTime` object.
.format(                                      // Generate text representing the value in our `LocalTime` object.
    DateTimeFormatter                         // Class responsible for generating text representing the value of a java.time object.
    .ofLocalizedTime(                         // Automatically localize the text being generated.
        FormatStyle.SHORT                     // Specify how long or abbreviated the generated text should be.
    )                                         // Returns a `DateTimeFormatter` object.
    .withLocale( Locale.US )                  // Specifies a particular locale for the `DateTimeFormatter` rather than rely on the JVM’s current default locale. Returns another separate `DateTimeFormatter` object rather than altering the first, per immutable objects pattern.
)                                             // Returns a `String` object.

10:31 Uhr

Automatisch lokalisieren

Anstatt auf einer 12-Stunden-Uhr mit AM / PM zu bestehen, möchten Sie möglicherweise, dass sich java.time automatisch für Sie lokalisiert. AnrufDateTimeFormatter.ofLocalizedTime .

Geben Sie zum Lokalisieren Folgendes an:

  • FormatStyle um zu bestimmen, wie lang oder abgekürzt die Zeichenfolge sein soll.
  • Locale bestimmen:
    • Die menschliche Sprache für die Übersetzung des Namens des Tages, des Monats und dergleichen.
    • Die kulturellen Normen, die über Fragen der Abkürzung, Großschreibung, Zeichensetzung, Trennzeichen und dergleichen entscheiden.

Hier erhalten wir die aktuelle Uhrzeit in einer bestimmten Zeitzone. Dann generieren wir Text, um diese Zeit darzustellen. Wir lokalisieren die französische Sprache in der kanadischen Kultur und dann die englische Sprache in der US-Kultur.

ZoneId z = ZoneId.of( "Asia/Tokyo" ) ;
LocalTime localTime = LocalTime.now( z ) ;

// Québec
Locale locale_fr_CA = Locale.CANADA_FRENCH ;  // Or `Locale.US`, and so on.
DateTimeFormatter formatterQuébec = DateTimeFormatter.ofLocalizedTime( FormatStyle.SHORT ).withLocale( locale_fr_CA ) ;
String outputQuébec = localTime.format( formatterQuébec ) ;

System.out.println( outputQuébec ) ;

// US
Locale locale_en_US = Locale.US ;  
DateTimeFormatter formatterUS = DateTimeFormatter.ofLocalizedTime( FormatStyle.SHORT ).withLocale( locale_en_US ) ;
String outputUS = localTime.format( formatterUS ) ;

System.out.println( outputUS ) ;

Sehen Sie diesen Code live auf IdeOne.com .

10 h 31

10:31 Uhr


0
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss a");

1
Es ist nützlicher, wenn Sie ein wenig über Ihre Antwort erklären.
Nima Derakhshanjan

("hh: mm: ss a") >>> Wenn hier kein a verwendet wird, werden 24 Stunden angezeigt. Wenn wir also in Ihrer Zeit AM / PM möchten, fügen Sie einfach dieses Format hinzu. Wenn Sie Verwirrung stiften, lassen Sie es mich bitte wissen.
Raju Ahmed

0

So geben Sie Ihr aktuelles Datums- und Uhrzeitformat für Mobilgeräte ein

9. Februar 2018, 22:36:59 Uhr

Date date = new Date();
 String stringDate = DateFormat.getDateTimeInstance().format(date);

Sie können es auf Ihre zeigen Activity, Fragment, CardView, ListViewüberall durch die VerwendungTextView

` TextView mDateTime;

  mDateTime=findViewById(R.id.Your_TextViewId_Of_XML);

  Date date = new Date();
  String mStringDate = DateFormat.getDateTimeInstance().format(date);
  mDateTime.setText("My Device Current Date and Time is:"+date);

  `

0
import java.text.SimpleDateFormat;
import java.text.DateFormat;
import java.util.Date;

public class Main {
   public static void main(String [] args){
       try {
            DateFormat parseFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm a");
            String sDate = "22-01-2019 13:35 PM";
            Date date = parseFormat.parse(sDate);
            SimpleDateFormat displayFormat = new SimpleDateFormat("dd-MM-yyyy hh:mm a");
            sDate = displayFormat.format(date);
            System.out.println("The required format : " + sDate);
        } catch (Exception e) {}
   }
}

3
Du isst eine Ausnahme. Der Ausnahmebehandler sollte mindestens eine Warnung bereitstellen.
SL Barth - Wiedereinsetzung Monica

-2

Sie können hierfür SimpleDateFormat verwenden.

SimpleDateFormat formatDate = new SimpleDateFormat("hh:mm a");

Hoffe das hilft dir.


1
Bitte lesen Sie die anderen Antworten, bevor Sie eine neue hinzufügen. Ihre Antwort ist im Grunde die gleiche wie diese: stackoverflow.com/a/18736764/4687348
FelixSFD

6
Ihre Antwort könnte nützlich sein, wenn Sie den Unterschied zwischen Ihrer Antwort und der alten, die ich in meinem ersten Kommentar verlinkt habe, erklären würden.
FelixSFD
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.