Как переформатировать формат времени? - PullRequest
0 голосов
/ 23 сентября 2018

Я работаю над проектом Android и получаю от API время в формате «10:12:57» (12-часовой формат), и я хочу отобразить его в формате «10:12», вот так (на 24 часа).Как переформатировать это время?

Так что 12:42:41 am должно стать 00:4202:13:39 pm должен быть представлен как 14:13.

Ответы [ 5 ]

0 голосов
/ 24 сентября 2018

tl; dr

LocalTime                                                    // Represent a time-of-day, without a date and without a time zone.
.parse(                                                      // Parse an input string to be a `LocalTime` object.
    "10:12:57 am".toUpperCase() ,                            // The cultural norm in the United States expects the am/pm to be in all-uppercase. So we convert our input value to uppercase.
    DateTimeFormatter.ofPattern( "hh:mm:ss a" , Locale.US )  // Specify a formatting pattern to match the input. 
)                                                            // Returns a `LocalTime` object.
.format(                                                     // Generate text representing the value in this date-time object.
    DateTimeFormatter.ofPattern( "HH:mm" , Locale.US )       // Note that `HH` in uppercase means 24-hour clock, not 12-hour.
)                                                            // Returns a `String`.

10: 12

java.time

Современный подход использует java.time классы, которые несколько лет назад вытеснили ужасные Date & Calendar & SimpleDateFormat классы.

Класс LocalTime представляет время суток в общем 24-часовом дне, бездата и без часового пояса.

Анализировать ввод строки как объект LocalTime.

String input = ( "10:12:57 am" );
DateTimeFormatter fInput = DateTimeFormatter.ofPattern( "HH:mm:ss a" , Locale.US );
LocalTime lt = LocalTime.parse( input.toUpperCase() , fInput );  // At least in the US locale, the am/pm is expected to be in all uppercase: AM/PM. So we call `toUppercase` to convert input accordingly.

lt.toString (): 10: 12: 57

Создайте String с текстом в формате желаемых минут.Обратите внимание, что HH в верхнем регистре означает 24-часовые часы.

DateTimeFormatter fOutput = DateTimeFormatter.ofPattern( "HH:mm" , Locale.US );
String output = lt.format( fOutput );

вывод: 10: 12


О java.time

Платформа java.time встроена в Java 8 и более поздние версии.Эти классы вытесняют старые классные устаревшие классы даты и времени, такие как java.util.Date, Calendar и & SimpleDateFormat.

Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на классы java.time .

Чтобы узнать больше, см. Oracle Tutorial .И поиск переполнения стека для многих примеров и объяснений.Спецификация: JSR 310 .

Вы можете обмениваться java.time объектами напрямую с вашей базой данных.Используйте драйвер JDBC , совместимый с JDBC 4.2 или более поздней версии.Нет необходимости в строках, нет необходимости в java.sql.* классах.

Где получить классы java.time?

  • Java SE 8 , Java SE 9 , Java SE 10, Java SE 11 и более поздние версии - часть стандартного Java API с связанной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и JavaSE 7
    • Большая часть функций java.time перенесена на Java 6 & 7 в ThreeTen-Backport .
  • Android
    • Более поздние версии пакетов Android для реализации java.time классы.
    • Для более ранних версий Android (<26) проект <a href="https://github.com/JakeWharton/ThreeTenABP" rel="nofollow noreferrer"> ThreeTenABP адаптируется ThreeTen-Backport (упомянуто выше).См. Как использовать ThreeTenABP… .

ThreeTen-Extra Проект расширяет java.time дополнительными классами.Этот проект является полигоном для возможных будущих дополнений к java.time.Здесь вы можете найти несколько полезных классов, таких как Interval, YearWeek, YearQuarter и more .

0 голосов
/ 23 сентября 2018
String str ="10:12:57 pm";

SimpleDateFormat formatter_from = new SimpleDateFormat("hh:mm:ss aa", Locale.US);
SimpleDateFormat formatter_to = new SimpleDateFormat("HH:mm",Locale.US);

try {
    Date d = formatter_from.parse(str);

    System.out.println(formatter_to.format(d));

} catch (ParseException e) {           
    e.printStackTrace();
}
0 голосов
/ 23 сентября 2018

Использование java.time (современный подход)

String str = "10:12:57 pm";

DateTimeFormatter formatter_from = DateTimeFormatter.ofPattern( "hh:mm:ss a", Locale.US ); //Use pattern symbol "hh" for 12 hour clock
LocalTime localTime = LocalTime.parse(str.toUpperCase(), formatter_from );
DateTimeFormatter formatter_to = DateTimeFormatter.ofPattern( "HH:mm" , Locale.US ); // "HH" stands for 24 hour clock

System.out.println(localTime.format(formatter_to));

См. Ответ BasilBourque ниже и OleV.V.ответьте здесь для лучшего объяснения.

Использование SimpleDateFormat

String str = "10:12:57 pm";

    SimpleDateFormat formatter_from = new SimpleDateFormat("hh:mm:ss a", Locale.US); 

    //Locale is optional. You might want to add it to avoid any cultural differences.

    SimpleDateFormat formatter_to = new SimpleDateFormat("HH:mm", Locale.US);

    try {
        Date d = formatter_from.parse(str);

        System.out.println(formatter_to.format(d));

    } catch (ParseException e) {           
        e.printStackTrace();
    }

Если вы введете 10:12:57, выход будет 10: 12.И если строка 10:12:57 вечера, вывод будет 22: 12.

0 голосов
/ 23 сентября 2018

Попробуйте:

   SimpleDateFormat displayFormat = new SimpleDateFormat("HH:mm");
   SimpleDateFormat parseFormat = new SimpleDateFormat("hh:mm:ss a");
   try {
         Date date = parseFormat.parse("10:12:57 pm");
         System.out.println(parseFormat.format(date) + " = " + displayFormat.format(date));
       } 
   catch (Exception e) {
         e.printStackTrace();
       }  

Дает:

10:12:57 pm = 22:12
0 голосов
/ 23 сентября 2018

Вы можете использовать такие форматеры:

SimpleDateFormat formatterFrom = new SimpleDateFormat("hh:mm:ss aa");
SimpleDateFormat formatterTo = new SimpleDateFormat("HH:mm");

Date date = formatterFrom.parse("10:12:57 pm");
System.out.println(formatterTo.format(date));
...