Показувати поточний час у 12-годинному форматі за допомогою AM / PM


184

В даний час час відображається як 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

Відповіді:


452

Найпростіший спосіб отримати його за допомогою шаблону дати - h:mm a, де

  • h - Година в ранку / вечір (1-12)
  • м - Хвилина в годині
  • a - маркер Am / pm

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

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

Детальніше про документацію - SimpleDateFormat java 7


61
Зауважте, що використання двох h ("hh") дає вам первинний нуль (тобто 01:23 ранку). Один "h" дає вам годину без ведучого нуля (1:23 ранку).
Бен Якубен

9
Як отримати AM&PM замість 'am' & '
p.m

@akashbs Я думаю, що немає простого способу, але ви можете спробувати щось на кшталт: у повному рядку дати викличте підрядку від (довжина - 4) до (довжина -1) і збережіть її в змінному_оригінальному, а потім створіть нову змінну_модифіковану, яка використовуватиме перший створений змінний_походження та замінює ".m" на "m", після чого викличте метод toUpperCase після цього поверніться до повного рядка дати та викликуйте заміну (
varia_original, змінний_модифікований

@akashbs Але ви можете використовувати місцевих жителів, кожен локальний використовує різні формати дати, я вважаю, що використання місцевих американців може також досягти того, що ви шукаєте
Tamim Attafi

@akashbs Для отримання додаткової інформації ознайомтеся з цими документами: developer.android.com/reference/java/text/SimpleDateFormat
Tamim Attafi


63

використовувати "hh:mm a"замість "HH:mm a". Тут hhдля 12-годинного формату та HHдля 24-годинного формату.

жива Demo


Дякуємо @RuchiraGayanRanaweei ... Мені просто цікаво захопити формат 24 і перетворити його у формат AM / PM ...
gumuruh

Це важливо. Щойно у мене був випадок, коли "18 листопада 2016 року 17:28" було перетворено на "2016-11-18T05: 28: 00" замість "2016-11-18T17: 28: 00", оскільки я використав неправильний запас часу. Дякую!
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);

Вихід: 11 вересня-13.12.25.15.375


17
SimpleDateFormat formatDate = new SimpleDateFormat("hh:mm:ss a");
  • h використовується для AM / PM разів (1-12).

  • Н використовується протягом 24 годин (1-24).

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

  • м - хвилина в годину

Примітка: Дві години надрукують початковий нуль: 13:13. Один год буде надруковано без першого нуля: 13:13.

Схоже, в основному всі мене вже до цього побили, але я відволікаюсь


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

ну це найкраща відповідь, яку я знайшов тут, дякую
Мартін Волек

7

Використання 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/ PMтексту.
Василь Бурк

5

Просто замініть нижченаведене твердження, і воно спрацює.

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

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

АБО

З рівня 26 API

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

2
У 2019 році, будь ласка, не навчайте молодих людей користуватися давно застарілим та сумно відомим клопотом SimpleDateFormat. Принаймні, не як перший варіант. І не без жодного застереження. Сьогодні ми набагато краще java.timeвживаємо сучасний API дати та часу Java та його DateTimeFormatter.
Оле ВВ

1
Дякую. Сучасну відповідь можна використовувати і на низьких рівнях API, якщо ви додасте ThreeTenABP , опору java.time, до свого проекту Android. Див. Як користуватися ThreeTenABP в Android Project (для такої простої задачі, як ця, це може бути дискусійним, але я рекомендую лише трохи більше часу та часу).
Оле ВВ

Оскільки AM та PM майже не використовуються іншими мовами, ніж англійська, я б, мабуть, використовував DateTimeFormatter.ofPattern("hh:mm a", Locale.ENGLISH)(або іншу англомовну мову).
Оле ВВ

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. Також ніхто не питав про назви файлів.
Роберт

2

тл; д-р

Нехай сучасні класи 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 ранку


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

1
Це корисніше, якщо ви трохи поясните свою відповідь.
Німа Дерахшанян

("hh: mm: ss a") >>> Тут, якщо wedont використовує, то з'явиться 24 години. тому, якщо ми хочемо, щоб у ваш час було AM / PM, просто додайте цей формат. якщо будь-яка плутанина, будь ласка, дайте мені знати.
Раджу Ахмед

0

Щоб помістити свій поточний формат дати та часу для мобільних пристроїв

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

-2

Ви можете використовувати SimpleDateFormat для цього.

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

Сподіваюся, це вам допоможе.


1
Будь ласка, прочитайте інші відповіді, перш ніж додавати нову. Ваш відповідь в основному так само , як це: stackoverflow.com/a/18736764/4687348
FelixSFD

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