Отображение 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);
}
}
Ответы
Ответ 1
К сожалению, стандартные методы форматирования не позволяют вам сделать это. И Йода тоже. Я думаю, что вам придется обрабатывать отформатированную дату простой заменой в постформатном формате.
String str = oldstr.replace("AM", "am").replace("PM","pm");
Вы могли бы использовать метод replaceAll()
который использует регулярные выражения, но я думаю, что вышеупомянутого, возможно, достаточно. Я не делаю toLowerCase()
так как это может toLowerCase()
форматирование, если вы в будущем измените форматную строку, чтобы содержать (скажем) названия месяцев или аналогичные.
РЕДАКТИРОВАТЬ: решение Джеймса Джитина выглядит намного лучше, и правильный способ сделать это (как отмечено в комментариях)
Ответ 2
Это работает
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);
}
}
Ответ 3
Попробуйте следующее:
System.out.println("time is " + ts.toLowerCase());
Хотя вы можете создать собственный формат здесь и здесь
К сожалению, из box AM и PM, похоже, не настраиваются в стандартном классе SimpleDateFormat
Ответ 4
Если вы не хотите делать подстановку строк, и используете Java 8 javax.time
:
Map<Long, String> ampm = new HashMap<>();
ampm.put(0l, "am");
ampm.put(1l, "pm");
DateTimeFormatter dtf = new DateTimeFormatterBuilder()
.appendPattern("E M/d h:mm")
.appendText(ChronoField.AMPM_OF_DAY, ampm)
.toFormatter()
.withZone(ZoneId.of("America/Los_Angeles"));
Необходимо вручную построить DateTimeFormatter
(указав отдельные части), так как для строчных букв am/pm нет символа шаблона. Вы можете использовать appendPattern
до и после.
Я полагаю, что нет никакого способа заменить символы по умолчанию am/pm, так как это единственный способ сделать замену строки в последней строке.
Ответ 5
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("a.m.", "AM").replace("p.m.","PM");
TextView textView = findViewById(R.id.textView);
textView.setText(formattedDate);
Ответ 6
Ответ Джеймса велик, если вы хотите другой стиль, отличный от по умолчанию am, pm. Но я боюсь, что вам нужно сопоставить локальные и локальные специфические AM/PM, установленные для принятия переопределения. Теперь вы просто используете java встроенный класс 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.
Ответ 7
просто добавьте 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()
, если вы хотите использовать верхний регистр
Ответ 8
String today = now.format(new DateTimeFormatterBuilder()
.appendPattern("MM/dd/yyyy ")
.appendText(ChronoField.AMPM_OF_DAY)
.appendLiteral(" (PST)")
.toFormatter(Locale.UK));
//output => 18/06/2019 (PST)
Locale.UK => утра или вечера; Locale.US => AM или PM; попробуйте другой язык для ваших нужд (по умолчанию и т.д.)