отображение AM и PM в маленькой букве после форматирования даты

После даты форматирования я показываю время, показывающее AM или PM (в верхнем случае), я хочу, чтобы он был в нижнем регистре, например am, pm это мой код

public class Timeis { public static void main(String s[]) { long ts = 1022895271767L; String st = null; st = new SimpleDateFormat(" MMM d 'at' hh:mm a").format(ts); System.out.println("time is " + ts); } } 

К сожалению, стандартные методы форматирования не позволяют делать это. И Йода тоже. Я думаю, вам придется обрабатывать вашу форматированную дату простой заменой после формата.

 String str = oldstr.replace("AM", "am").replace("PM","pm"); 

Вы можете использовать метод replaceAll() который использует regepxs, но я думаю, что вышеуказанное возможно достаточно. Я не делаю одеяло toLowerCase() поскольку это может toLowerCase() форматирование, если вы измените строку формата в будущем, чтобы содержать (скажем) месячные имена или аналогичные.

EDIT: решение Джеймса Дзитина выглядит намного лучше, и правильный способ сделать это (как отмечается в комментариях)

Это работает

 public class Timeis { public static void main(String s[]) { long ts = 1022895271767L; SimpleDateFormat sdf = new SimpleDateFormat(" MMM d 'at' hh:mm a"); // CREATE DateFormatSymbols WITH ALL SYMBOLS FROM (DEFAULT) Locale DateFormatSymbols symbols = new DateFormatSymbols(Locale.getDefault()); // OVERRIDE SOME symbols WHILE RETAINING OTHERS symbols.setAmPmStrings(new String[] { "am", "pm" }); sdf.setDateFormatSymbols(symbols); String st = sdf.format(ts); System.out.println("time is " + st); } } 

Попробуй это:

 System.out.println("time is " + ts.toLowerCase()); 

Хотя вы можете создать собственный формат, подробно описанный здесь и здесь.

К сожалению, из коробки AM и PM, похоже, не могут быть настроены в стандартном classе SimpleDateFormat

Если вы не хотите выполнять замену строк и используете Java 8 javax.time :

 Map ampm = new HashMap<>(); ampm.put(0l, "am"); ampm.put(1l, "pm"); DateTimeFormatter dtf = new DateTimeFormatterBuilder() .appendPattern("EM/dh:mm") .appendText(ChronoField.AMPM_OF_DAY, ampm) .toFormatter() .withZone(ZoneId.of("America/Los_Angeles")); 

Необходимо вручную создать DateTimeFormatter (указать отдельные части), так как нет символа шаблона для нижнего регистра am / pm. Вы можете использовать appendPattern до и после.

Я считаю, что нет возможности заменить символы am / pm по умолчанию, поскольку это единственный способ сократить замену строки в последней строке.

 Calendar c = Calendar.getInstance(); System.out.println("Current time => " + c.getTime()); SimpleDateFormat df = new SimpleDateFormat("HH:mm a"); String formattedDate = df.format(c.getTime()); formattedDate = formattedDate.replace("am", "AM").replace("pm","PM"); TextView textView = findViewById(R.id.textView); textView.setText(formattedDate); 

Ответ Джеймса велик, если вы хотите другой стиль, отличный от дефолта am, pm. Но, боюсь, вам нужно сопоставить локальные и локальные специфические AM / PM, установленные для использования переопределения. Теперь вы просто используете java встроенный class java.util.Formatter. Поэтому простой пример выглядит так:

 System.out.println(String.format(Locale.UK, "%1$tl%1$tp", LocalTime.now())); 

Это дает:

 9pm 

Чтобы отметить, что если вы хотите использовать верхний регистр, просто замените «% 1 $ t p» на «% 1 $ T p». Вы можете найти более подробную информацию по адресу http://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html#dt .

просто добавьте toLowarCase() как это

 public class Timeis { public static void main(String s[]) { long ts = 1022895271767L; String st = null; st = new SimpleDateFormat(" MMM d 'at' hh:mm a").format(ts).toLowerCase(); System.out.println("time is " + ts); } } 

и toUpperCase() если вы хотите, чтобы верхний регистр

  • Измерьте время выполнения для Java-метода
  • почему переменная экземпляра суперclassа не переопределяется в методе подclassа
  • Пользовательский макет для DialogFragment OnCreateView и OnCreateDialog
  • Создать папку в Android
  • Android - Сохранить изображение с URL на SD-карту
  • SSLHandshakeException Цепочный якорь для пути сертификации не найден Android HTTPS
  • Что такое sharedUserId в Android и как оно используется?
  • Как отправить данные из диалогового windows в fragment?
  • Выберите несколько изображений из фотоальбома на Android с помощью намерений
  • Android имитирует нажатие клавиши
  • Неподдерживаемая версия major.minor 49.0
  • Давайте будем гением компьютера.