Exibir a hora atual no formato de 12 horas com AM / PM

184

No momento, a hora é exibida como 13:35. No entanto, eu quero exibir no formato de 12 horas com AM / PM, ou seja, 13:35 em vez de 13:35.

O código atual é como abaixo

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
fonte
7
TenteSimpleDateFormat formatDate = new SimpleDateFormat("hh:mm a");
Tarsem Singh
1
Acima pergunta foi feita em 2013 ano e o que você mencionou em 2014 assim como pode esta pergunta acima é o duplicado da pergunta rápida também duas perguntas foram feitas para diferentes tecnologias
Ronan
4
@ J-Dizzle Como uma pergunta Java pode ser uma duplicata de uma pergunta Swift?
Mark Rotteveel
Doh minhas desculpas, você está correto!
J-Dizzle

Respostas:

452

A maneira mais fácil de obtê-lo usando o padrão de data - h:mm a, onde

  • h - Hora em am / pm (1-12)
  • m - Minuto em hora
  • a - marcador Am / pm

Fragmento de código :

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

Leia mais sobre documentação - SimpleDateFormat java 7

Subhrajyoti Majumder
fonte
61
Observe que o uso de dois h ("hh") fornece um zero inicial (ou seja, 01:23). Um "h" fornece a hora sem o zero inicial (1:23).
Ben Jakuben 02/12/19
9
Como chegar AM & PM em vez de 'am' e 'pm'
bs Akash
@akashbs Acho que não há uma maneira fácil de contornar, mas você pode tentar algo como: em sua string de data completa, chame a substring de (comprimento - 4) a (comprimento -1) e salve-o em um variable_original e crie um novo variable_modified que usará a primeira variável_original criada e substitui ".m" por "m", chame o método toUpperCase depois retorne à sua string de data completa e chame replace (variable_original, variable_modified), isso irá alcançar o que você está procurando
Tamim Attafi
@akashbs Mas você pode usar locais, cada local usa diferentes formatos de data, acredito que usar o local dos EUA também pode alcançar o que você procura
Tamim Attafi -
@akashbs Para obter mais informações, consulte estes documentos: developer.android.com/reference/java/text/SimpleDateFormat
Tamim Attafi -
109

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

insira a descrição da imagem aqui

Documentos em Java para SimpleDateFormat

Tarsem Singh
fonte
1
Fora de moda agora. Estes códigos de formatação são agora suplantado por códigos de formatação da DateTimeFormatterclasse, por JSR 310.
manjericão Bourque
63

use em "hh:mm a"vez de "HH:mm a". Aqui hhpara o formato de 12 horas e HHpara o formato de 24 horas.

Demonstração ao vivo

Ruchira Gayan Ranaweera
fonte
Graças @RuchiraGayanRanaweei ... eu só perguntando para capturar o formato de 24 e convertê-lo para o formato AM / PM ...
gumuruh
Isso é importante. Acabei de ter um caso em que "18 de novembro de 2016 às 17:28" foi convertido para "2016-11-18T05: 28: 00" em vez de "2016-11-18T17: 28: 00" porque usei o marcador de posição errado na hora. Obrigado!
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);

Saída: 11-set-13 12.25.15.375 PM

MansoorShaikh
fonte
17
SimpleDateFormat formatDate = new SimpleDateFormat("hh:mm:ss a");
  • h é usado para os horários AM / PM (1-12).

  • H é usado por 24 horas (1-24).

  • a é o marcador AM / PM

  • m é minuto em hora

Nota: Dois hs imprimirão um zero à esquerda: 13:13. Um h será impresso sem o zero inicial: 13:13.

Parece que basicamente todo mundo já me venceu, mas eu discordo

Johnny K
fonte
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
fonte
Bem, esta é a melhor resposta que eu encontrei aqui, graças
Martin Volek
7

Usando o Java 8:

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

A saída está no AM/PMformato.

Sample output:  3:00 PM
Bala
fonte
Especifique a Localechamando withLocaleno objeto formatador para determinar a linguagem humana e as normas culturais a serem usadas na geração do AM/ PMtext.
Basil Bourque
5

Basta substituir a declaração abaixo e ela funcionará.

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

Se você quiser o horário atual com AM, PM no Android, use

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

Se você quiser hora atual com am, pm

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

OU

Do nível 26 da API

LocalTime localTime = LocalTime.now();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("hh:mm a");
String time = localTime.format(dateTimeFormatter);
Margem
fonte
2
Em 2019, por favor, não ensine os jovens a usar a SimpleDateFormataula desatualizada e notoriamente problemática . Pelo menos não como a primeira opção. E não sem nenhuma reserva. Hoje, temos muito melhor java.time, a moderna API de data e hora de Java e suas DateTimeFormatter.
Ole VV
1
Obrigado. A resposta moderna também pode ser usada em baixos níveis de API se você adicionar o ThreeTenABP , o backport de java.time, ao seu projeto Android. Consulte Como usar o ThreeTenABP no Android Project (para uma tarefa simples como esta, o valor pode ser discutível, mas para apenas um pouco mais de data e hora de trabalho, eu recomendo).
31719 Ole VV
Como AM e PM são dificilmente usados ​​em outros idiomas além do inglês, eu provavelmente usaria DateTimeFormatter.ofPattern("hh:mm a", Locale.ENGLISH)(ou outro local de língua inglesa).
31719 Ole VV
2
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm a");

Isso exibirá a data e a hora

gopal
fonte
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
fonte
Muito complicado e não intuitivo. Se você deve usar o SimpleDateFormat descontinuado, coloque pelo menos tudo em uma chamada. Também explique por que você usa 12 em vez da hora real, da meia-noite à 1. Além disso, ninguém perguntou sobre nomes de arquivos.
Robert
2

tl; dr

Permita que as modernas classes java.time do JSR 310 gerem automaticamente texto localizado, em vez de codificar com código de 12 horas 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

Localizar automaticamente

Em vez de insistir no relógio de 12 horas com AM / PM, convém permitir que o java.time seja localizado automaticamente. Ligue DateTimeFormatter.ofLocalizedTime.

Para localizar, especifique:

  • FormatStyle para determinar quanto tempo ou abreviação a string deve ter.
  • Locale para determinar:
    • A linguagem humana para tradução do nome do dia, nome do mês e assim por diante.
    • As normas culturais que decidem questões de abreviação, capitalização, pontuação, separadores e outros.

Aqui, obtemos a hora atual do dia, como visto em um fuso horário específico. Em seguida, geramos texto para representar esse tempo. Localizamos o idioma francês na cultura do Canadá e o idioma inglês na cultura dos EUA.

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

Veja este código executado ao vivo em IdeOne.com .

10 h 31

10:31

Basil Bourque
fonte
0
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss a");
Raju Ahmed
fonte
1
É mais útil se você explicar um pouco sobre sua resposta.
Nima Derakhshanjan
("hh: mm: ss a") >>> Aqui, se não usarmos, serão exibidas 24 horas. portanto, se quisermos AM / PM no seu horário, basta adicionar este formato. se alguma confusão por favor me avise.
Raju Ahmed
0

Para colocar o formato atual da data e hora do celular em

9 de fevereiro de 2018 10:36:59

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

você pode mostrá-lo para o seu Activity, Fragment, CardView, ListViewem qualquer lugar, usandoTextView

` 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
fonte
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
fonte
3
Você está comendo uma exceção. O manipulador de exceção deve fornecer pelo menos um aviso.
SL Barth - Restabelece Monica
-2

Você pode usar SimpleDateFormat para isso.

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

Espero que isso ajude você.

Mayank Bhatnagar
fonte
1
Leia as outras respostas antes de adicionar uma nova. Sua resposta é basicamente a mesma que esta: stackoverflow.com/a/18736764/4687348
FelixSFD
6
Sua resposta pode ser útil, se você explicar a diferença entre sua resposta e a antiga que eu vinculei no meu primeiro comentário.
FelixSFD 01/02