Visualizza l'ora corrente nel formato 12 ore con AM / PM


184

Attualmente l'ora visualizzata come 13:35 PM Tuttavia, voglio visualizzare il formato 12 ore con AM / PM, ovvero 13:35 invece di 13:35 PM

Il codice attuale è il seguente

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
ProvaSimpleDateFormat formatDate = new SimpleDateFormat("hh:mm a");
Tarsem Singh,

1
La domanda di cui sopra è stata posta nel 2013 e quella che hai menzionato nel 2014, quindi come può questa domanda di cui sopra è il duplicato della domanda rapida anche entrambe le domande sono state poste per tecnologie diverse
Ron

4
@ J-Dizzle Come può una domanda Java essere un duplicato di una domanda Swift?
Mark Rotteveel,

Mi scuso, hai ragione!
J-Dizzle,

Risposte:


452

Il modo più semplice per ottenerlo utilizzando il modello di data - h:mm a, dove

  • h - Ora in am / pm (1-12)
  • m - Minuto in ora
  • a - Indicatore am / pm

Snippet di codice:

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

Maggiori informazioni sulla documentazione - SimpleDateFormat java 7


61
Nota che l'uso di due h ("hh") ti dà uno zero iniziale (cioè 01:23). Una "h" ti dà l'ora senza lo zero iniziale (1:23).
Ben Jakuben,

9
Come ottenere AM&PM invece di 'am' & 'p.m'
akash bs

@akashbs Penso che non ci sia un modo semplice per aggirare ma puoi provare qualcosa del genere: nella stringa della data completa, chiama la sottostringa da (lunghezza - 4) a (lunghezza -1) e salvala in una variabile_originale, quindi crea una nuova variabile_modificata che utilizzerà il primo creato variabile_originale e sostituisce ".m" con "m", quindi chiama il metodo a UpperCase dopo che ritorna alla stringa di data completa e chiama sostituisci (variabile_originale, variabile_modificato) questo raggiungerà ciò che stai cercando
Tamim Attafi

@akashbs Ma puoi usare la gente del posto, ogni locale usa diversi formati di data, credo che usare il locale degli Stati Uniti possa raggiungere anche quello che stai cercando
Tamim Attafi,

@akashbs Per maggiori informazioni consulta questi documenti: developer.android.com/reference/java/text/SimpleDateFormat
Tamim Attafi


63

utilizzare "hh:mm a"invece di "HH:mm a". Qui hhper il formato 12 ore e HHper il formato 24 ore.

Demo live


Grazie @RuchiraGayanRanaweei ... mi sto solo chiedendo di catturare il formato 24 e convertirlo nel formato AM / PM ...
gumuruh,

Questo è importante. Ho appena avuto un caso in cui "18 novembre 2016 17:28" è stato convertito in "18/11/2016 T05: 28: 00" invece di "18-11-2016 T17: 28: 00" perché ho usato il segnaposto per l'ora sbagliata. Grazie!
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);

Uscita: 11-set-13, 12.25.15.375 PM


17
SimpleDateFormat formatDate = new SimpleDateFormat("hh:mm:ss a");
  • h viene utilizzato per i tempi AM / PM (1-12).

  • H viene utilizzato per 24 ore (1-24).

  • a è il marcatore AM / PM

  • m è minuto in ora

Nota: due ore stamperanno uno zero iniziale: 13:13. Una h verrà stampata senza lo zero iniziale: 13:13.

In pratica sembra che tutti mi abbiano già battuto, ma sto divagando


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

bene, questa è la migliore risposta che ho trovato qui, grazie
Martin Volek

7

Utilizzando Java 8:

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

L'output è in AM/PMformato.

Sample output:  3:00 PM

Specificare un Localechiamando withLocalequell'oggetto formatter, per determinare il linguaggio umano e le norme culturali da usare per generare il AM/ PMtext.
Basil Bourque,

5

Basta sostituire la seguente dichiarazione e funzionerà.

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

3

Se si desidera l'ora corrente con AM, PM in uso Android

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

Se si desidera l'ora corrente con am, pm

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

O

Dal livello API 26

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

2
Nel 2019, per favore, non insegnare ai giovani a usare la SimpleDateFormatclasse obsoleta e notoriamente problematica . Almeno non come prima opzione. E non senza alcuna prenotazione. Oggi abbiamo molto meglio nella java.timemoderna API di data e ora di Java e nelle sue DateTimeFormatter.
Ole VV,

1
Grazie. La risposta moderna può essere utilizzata anche a bassi livelli API se aggiungi ThreeTenABP , il backport di java.time, al tuo progetto Android. Vedi Come usare ThreeTenABP in Android Project (per un compito semplice come questo, il valore può essere discutibile, ma per un po 'più di lavoro di data e ora lo consiglio).
Ole VV,

Dato che AM e PM sono poco usati in lingue diverse dall'inglese, probabilmente userei DateTimeFormatter.ofPattern("hh:mm a", Locale.ENGLISH)(o un'altra lingua inglese).
Ole VV,

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

Questo visualizzerà la data e l'ora


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

Troppo contorto e poco intuitivo. Se è necessario utilizzare SimpleDateFormat obsoleto, inserire almeno tutto in una chiamata. Spiega anche perché usi 12 anziché l'ora effettiva da mezzanotte a 1. Inoltre, nessuno ti ha chiesto dei nomi dei file.
Robert,

2

tl; dr

Lascia che le moderne classi java.time di JSR 310 generino automaticamente testo localizzato, piuttosto che codificare 12 ore e AM / PM.

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

Localizza automaticamente

Invece di insistere sull'orologio a 12 ore con AM / PM, potresti voler lasciare che java.time si localizzi automaticamente per te. Chiama DateTimeFormatter.ofLocalizedTime.

Per localizzare, specificare:

  • FormatStyle per determinare quanto deve essere lunga o abbreviata la stringa.
  • Locale determinare:
    • Il linguaggio umano per la traduzione di nome del giorno, nome del mese e così via.
    • Le norme culturali che decidono questioni di abbreviazione, maiuscole, punteggiatura, separatori e così via.

Qui otteniamo l'ora del giorno attuale come si vede in un particolare fuso orario. Quindi generiamo testo per rappresentare quel momento. Ci localizziamo nella lingua francese nella cultura canadese, quindi nella lingua inglese nella cultura americana.

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

Vedi questo codice eseguito dal vivo su IdeOne.com .

10 h 31

10:31


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

1
È più utile se spieghi un po 'della tua risposta.
Nima Derakhshanjan,

("hh: mm: ss a") >>> Qui se non si usa un, allora appariranno 24 ore. quindi se vogliamo AM / PM a tuo tempo, aggiungi questo formato. se c'è qualche confusione per favore fatemelo sapere.
Raju Ahmed,

0

Per inserire il tuo attuale formato di data e ora mobile

9 febbraio 2018 22:36:59

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

è possibile mostrare al vostro Activity, Fragment, CardView, ListViewovunque utilizzandoTextView

` 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
Stai mangiando un'eccezione. Il gestore delle eccezioni dovrebbe almeno fornire un avviso.
SL Barth - Ripristina Monica il

-2

È possibile utilizzare SimpleDateFormat per questo.

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

Spero che questo ti aiuti.


1
Leggi le altre risposte prima di aggiungerne una nuova. La tua risposta è fondamentalmente lo stesso come questo: stackoverflow.com/a/18736764/4687348
FelixSFD

6
La tua risposta potrebbe essere utile, se spiegassi la differenza tra la tua risposta e quella precedente che ho collegato nel mio primo commento.
FelixSFD
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.