Отображение текущего времени в 12-часовом формате с AM / PM


193

В настоящее время время отображается как 13:35. Однако я хочу отображать 12-часовой формат с AM / PM, то есть 13:35 вместо 13:35.

Текущий код выглядит следующим образом

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
ПопробуйSimpleDateFormat formatDate = new SimpleDateFormat("hh:mm a");
Тарсем Сингх

1
Вышеупомянутый вопрос был задан в 2013 году, а тот, который вы упомянули в 2014 году, так как этот вопрос может быть дубликатом быстрого вопроса, также оба вопроса были заданы для разных технологий
ronan

4
@ J-Dizzle Как вопрос Java может дублировать вопрос Swift?
Марк Роттевил

Мои извинения, вы правы!
J-Dizzle

Ответы:


463

Самый простой способ получить его, используя шаблон даты - h:mm a, где

  • h - час в am / pm (1-12)
  • м - Минута в час
  • a - маркер am / pm

Фрагмент кода:

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

Подробнее о документации - SimpleDateFormat java 7


62
Обратите внимание, что использование двух знаков h («чч») дает вам начальный ноль (например, 01:23). Одна "h" дает вам час без нуля в начале (1:23).
Бен Якубен

9
Как получить AM&PM вместо «am» и «pm»
akash bs

@akashbs Я думаю, что нет простого способа обойтись, но вы можете попробовать что-то вроде: в вашей полной строке даты вызовите подстроку от (длина - 4) до (длина -1) и сохраните ее в variable_original, затем создайте новую variable_modified, которая будет использовать первый созданный variable_original и заменяет ".m" на "m", затем вызовите метод toUpperCase после этого вернитесь к вашей полной строке даты и вызовите replace (variable_original, variable_modified), это приведет к тому, что вы ищете
Тамим Аттафи,

@akashbs Но вы можете использовать местных жителей, каждый из них использует разные форматы даты, я считаю, что использование местных жителей США также может достичь того, что вы ищете,
Тамим Аттафи

@akashbs Для получения дополнительной информации проверьте эти документы: developer.android.com/reference/java/text/SimpleDateFormat
Тамим Аттафи


65

использовать "hh:mm a"вместо "HH:mm a". Здесь hhдля 12-часового формата и HHдля 24-часового формата.

Живая демонстрация


Спасибо @RuchiraGayanRanaweei ... мне просто интересно захватить формат 24 и преобразовать его в формат AM / PM ...
gumuruh

Это важно. У меня был случай, когда «18 ноября 2016 17:28» было преобразовано в «2016-11-18T05: 28: 00» вместо «2016-11-18T17: 28: 00», потому что я использовал неправильный заполнитель часа. Благодарность!
Kekzpanda

25
SimpleDateFormat formatDate = new SimpleDateFormat("hh:mm:ss a");
  • h используется для времени AM / PM (1–12).

  • H используется в течение 24 часов (1-24).

  • a - маркер AM / PM

  • м - минута в час

Примечание. Два h будут выводить начальный ноль: 13:13. Один h будет напечатан без нуля в начале: 13:13.

Похоже, почти все уже меня опередили, но я отвлекся


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

Выход: 11-сен-13 12.25.15.375


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

1
ну, это лучший ответ, который я нашел здесь, спасибо
Мартин Волек

8

Использование Java 8:

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

Вывод находится в AM/PMформате.

Sample output:  3:00 PM

Задайте a Locale, вызвав withLocaleэтот объект форматирования, чтобы определить человеческий язык и культурные нормы, которые будут использоваться при создании AM/ PMtext.
Basil

5

Просто замените приведенную ниже инструкцию, и она будет работать.

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

4

tl; dr

Пусть современные классы java.time JSR 310 автоматически генерируют локализованный текст, а не жестко кодируют 12-часовые часы и 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 утра

Автоматически локализовать

Вместо того, чтобы настаивать на 12-часовом режиме с AM / PM, вы можете позволить java.time автоматически локализоваться для вас. Звоните DateTimeFormatter.ofLocalizedTime.

Для локализации укажите:

  • FormatStyle чтобы определить, насколько длинной или сокращенной должна быть строка.
  • Locale для определения:
    • Человеческий язык для перевода имени дня, имя месяца, и тому подобное.
    • В культурных нормах решения вопросов сокращения, капитализации, пунктуация, сепараторы, и тому подобное.

Здесь мы получаем текущее время дня в определенном часовом поясе. Затем мы генерируем текст, чтобы представить это время. Мы локализуем на французский язык в культуре Канады, затем на английский язык в культуре США.

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

Посмотрите, как этот код запускается вживую на IdeOne.com .

10 ч 31

10:31 утра


3

Если вам нужно текущее время с AM, PM в Android используйте

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

Если вы хотите текущее время с утра, вечера

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

ИЛИ

Начиная с уровня API 26

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

2
В 2019 году, пожалуйста, не учите молодых пользоваться давно устаревшим и заведомо неприятным SimpleDateFormatуроком. По крайней мере, не в качестве первого варианта. И не без оговорок. Сегодня у нас намного лучше java.time, современный API даты и времени Java и его DateTimeFormatter.
Ole VV

1
Спасибо. Современный ответ можно использовать и на низких уровнях API, если вы добавите ThreeTenABP , backport java.time, в свой проект Android. См. Как использовать ThreeTenABP в Android Project (для такой простой задачи, как эта, значение может быть спорным, но для немного большей работы с датой и временем я рекомендую это).
Ole VV

Поскольку AM и PM почти не используются на других языках, кроме английского, я бы, вероятно, использовал DateTimeFormatter.ofPattern("hh:mm a", Locale.ENGLISH)(или другой англоязычный язык).
Ole VV

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

Это отобразит дату и время


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

Слишком запутанно и не интуитивно. Если вам необходимо использовать устаревший SimpleDateFormat, по крайней мере поместите все за один вызов. Также объясните, почему вы используете 12 вместо фактического часа с полуночи до 1. Кроме того, никто не спрашивал об именах файлов.
Роберт

1

Чтобы поместить текущий мобильный формат даты и времени в

9 февраля 2018 г., 22:36:59

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

Вы можете показать его своим Activity, Fragment, CardView, в ListViewлюбом месте , используяTextView

` 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
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss a");

1
Будет полезнее, если вы немного объясните свой ответ.
Нима Дерахшанджан

("чч: мм: сс а") >>> Здесь, если не использовать, будет отображаться 24 часа. так что, если мы хотим AM / PM в ваше время, просто добавьте этот формат. если возникнут затруднения, дайте мне знать.
Раджу Ахмед

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
Вы едите исключение. Обработчик исключений должен как минимум выдавать предупреждение.
SL Barth - Reinstate Monica

-2

Для этого вы можете использовать SimpleDateFormat.

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

Надеюсь, это тебе поможет.


1
Пожалуйста, прочтите другие ответы перед добавлением нового. Ваш ответ в основном такой же, как этот: stackoverflow.com/a/18736764/4687348
FelixSFD 01

6
Ваш ответ может быть полезен, если вы объясните разницу между вашим ответом и старым ответом, который я указал в своем первом комментарии.
FelixSFD 01
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.