Afficher l'heure actuelle au format 12 heures avec AM / PM

184

Actuellement, l'heure affichée est 13:35 PM Cependant, je souhaite l'afficher au format 12 heures avec AM / PM, c'est-à-dire 1:35 PM au lieu de 13:35 PM

Le code actuel est comme ci-dessous

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";
}
Ronan
la source
7
EssayezSimpleDateFormat formatDate = new SimpleDateFormat("hh:mm a");
Tarsem Singh
1
La question ci-dessus a été posée en 2013 et celle que vous avez mentionnée en 2014, alors comment cette question ci-dessus peut-elle être le double de la question
rapide.Les
4
@ J-Dizzle Comment une question Java peut-elle être le double d'une question Swift?
Mark Rotteveel
Faites mes excuses, vous avez raison!
J-Dizzle

Réponses:

452

Le moyen le plus simple de l'obtenir en utilisant le modèle de date - h:mm a, où

  • h - Heure en am / pm (1-12)
  • m - Minute en heure
  • a - Marqueur am / pm

Extrait de code :

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

En savoir plus sur la documentation - SimpleDateFormat java 7

Subhrajyoti Majumder
la source
61
Notez que l'utilisation de deux h ("hh") vous donne un zéro non significatif (c'est-à-dire 01:23 AM). Un "h" vous donne l'heure sans le zéro non significatif (1:23 AM).
Ben Jakuben
9
Comment obtenir AM&PM au lieu de 'am' et 'p.m'
Akash BS
@akashbs Je pense qu'il n'y a pas de solution facile, mais vous pouvez essayer quelque chose comme: dans votre chaîne de date complète, appelez la sous-chaîne de (longueur - 4) à (longueur -1) et enregistrez-la dans un variable_original puis créez une nouvelle variable_modified qui utilisera le premier créé variable_original et remplace ".m" par "m", puis appelez la méthode toUpperCase après cela, revenez à votre chaîne de date complète et appelez replace (variable_original, variable_modified) cela permettra d'obtenir ce que vous recherchez
Tamim Attafi
@akashbs Mais vous pouvez utiliser des locaux, chaque local utilise des formats de date différents, je pense que l'utilisation du local américain peut également réaliser ce que vous recherchez
Tamim Attafi
@akashbs Pour plus d'informations, consultez ces documents: developer.android.com/reference/java/text/SimpleDateFormat
Tamim Attafi
109

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

entrez la description de l'image ici

Documentation Java pour SimpleDateFormat

Tarsem Singh
la source
1
Désuet maintenant. Ces codes de formatage sont désormais supplantés par les codes de formatage de la DateTimeFormatterclasse, selon JSR 310.
Basil Bourque
63

utiliser à la "hh:mm a"place de "HH:mm a". Ici hhpour le format 12 heures et HHpour le format 24 heures.

Démo en direct

Ruchira Gayan Ranaweera
la source
Merci @RuchiraGayanRanaweei ... Je me demandais juste de capturer le format 24 et de le convertir au format AM / PM ...
gumuruh
C'est important. J'ai juste eu un cas où "18 novembre 2016 5:28 PM" a été converti en "2016-11-18T05: 28: 00" au lieu de "2016-11-18T17: 28: 00" car j'ai utilisé le mauvais espace réservé d'heure. Merci!
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);

Sortie: 11-Sep-13 12.25.15.375 PM

MansoorShaikh
la source
17
SimpleDateFormat formatDate = new SimpleDateFormat("hh:mm:ss a");
  • h est utilisé pour les heures AM / PM (1-12).

  • H est utilisé pendant 24 heures (1-24).

  • a est le marqueur AM / PM

  • m est minute en heure

Remarque: Deux h afficheront un zéro non significatif: 01:13 PM. Une heure s'imprimera sans le zéro non significatif: 1:13 PM.

On dirait que tout le monde m'a déjà battu, mais je m'égare

Johnny K
la source
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())); 
Sucharith
la source
bien, c'est la meilleure réponse que j'ai trouvée ici, merci
Martin Volek
7

Utilisation de Java 8:

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

La sortie est au AM/PMformat.

Sample output:  3:00 PM
Bala
la source
Spécifiez a Localeen appelant withLocalecet objet de formatage, pour déterminer le langage humain et les normes culturelles à utiliser pour générer le AM/ PMtext.
Basil Bourque
5

Remplacez simplement la déclaration ci-dessous et cela fonctionnera.

SimpleDateFormat formatDate = new SimpleDateFormat("hh:mm a");
user2481237
la source
3

Si vous voulez l'heure actuelle avec AM, PM dans l' utilisation d' Android

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

Si vous voulez l'heure actuelle avec am, pm

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

OU

À partir du niveau d'API 26

LocalTime localTime = LocalTime.now();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("hh:mm a");
String time = localTime.format(dateTimeFormatter);
Marge
la source
2
En 2019, veuillez ne pas apprendre aux jeunes à utiliser la SimpleDateFormatclasse depuis longtemps obsolète et notoirement gênante . Du moins pas comme première option. Et pas sans aucune réserve. Aujourd'hui, nous avons tellement mieux avec java.timel'API de date et d'heure Java moderne et ses DateTimeFormatter.
Ole VV
1
Merci. La réponse moderne peut également être utilisée sur des niveaux d'API bas si vous ajoutez ThreeTenABP , le backport de java.time, à votre projet Android. Voir Comment utiliser ThreeTenABP dans Android Project (pour une tâche simple comme celle-ci, la valeur peut être discutable, mais pour un peu plus de date et d'heure, je le recommande).
Ole VV
Étant donné que AM et PM ne sont guère utilisés dans d'autres langues que l'anglais, j'utiliserais probablement DateTimeFormatter.ofPattern("hh:mm a", Locale.ENGLISH)(ou un autre lieu anglophone).
Ole VV
2
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm a");

Cela affichera la date et l'heure

gopal
la source
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
alaguvel c
la source
Beaucoup trop compliqué et peu intuitif. Si vous devez utiliser le SimpleDateFormat obsolète, mettez au moins tout en un seul appel. Veuillez également expliquer pourquoi vous utilisez 12 au lieu de l'heure réelle de minuit à 1. De plus, personne n'a posé de questions sur les noms de fichiers.
Robert le
2

tl; dr

Laissez les classes java.time modernes de JSR 310 générer automatiquement du texte localisé, plutôt que le codage en dur de l'horloge 12 heures et 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.

10h31

Localiser automatiquement

Plutôt que d'insister sur une horloge de 12 heures avec AM / PM, vous pouvez laisser java.time se localiser automatiquement pour vous. Appelez DateTimeFormatter.ofLocalizedTime.

Pour localiser, spécifiez:

  • FormatStyle pour déterminer la longueur ou l'abréviation de la chaîne.
  • Locale déterminer:
    • La langue humaine pour la traduction du nom du jour, du nom du mois, etc.
    • Les normes culturelles décidant des questions d'abréviation, de capitalisation, de ponctuation, de séparateurs, etc.

Ici, nous obtenons l'heure actuelle telle qu'elle apparaît dans un fuseau horaire particulier. Ensuite, nous générons du texte pour représenter cette heure. Nous localisons la langue française dans la culture canadienne, puis la langue anglaise dans la culture américaine.

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

Voir ce code exécuté en direct sur IdeOne.com .

10 h 31

10h31

Basil Bourque
la source
0
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss a");
Raju Ahmed
la source
1
C'est plus utile si vous expliquez un peu votre réponse.
Nima Derakhshanjan
("hh: mm: ss a") >>> Ici, si nous n'utilisons pas un, alors 24 heures s'afficheront. donc si nous voulons AM / PM à votre heure, ajoutez simplement ce format. en cas de confusion, veuillez me le faire savoir.
Raju Ahmed
0

Pour mettre la date et l'heure de votre mobile au format

9 févr.2018 22:36:59

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

vous pouvez montrer à votre Activity, Fragment, CardView, ListViewpartout en utilisantTextView

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

  `
abhishek jha
la source
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) {}
   }
}
Manas Ranjan Mahapatra
la source
3
Vous mangez une exception. Le gestionnaire d'exceptions doit au moins fournir un avertissement.
SL Barth - Réintégrer Monica le
-2

Vous pouvez utiliser SimpleDateFormat pour cela.

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

J'espère que cela vous aide.

Mayank Bhatnagar
la source
1
Veuillez lire les autres réponses avant d'en ajouter une nouvelle. Votre réponse est fondamentalement la même que celle-ci: stackoverflow.com/a/18736764/4687348
FelixSFD
6
Votre réponse pourrait être utile, si vous expliquiez la différence entre votre réponse et l'ancienne que j'ai liée dans mon premier commentaire.
FelixSFD