отображение утра и вечера в строчной букве после форматирования даты
после даты форматирования я показываю время, которое показывает 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);
}
}
7 ответов:
к сожалению, стандартные методы форматирования не позволяют этого сделать. И Джода тоже. Я думаю, что вам придется обрабатывать отформатированную дату с помощью простой замены после форматирования.
String str = oldstr.replace("AM", "am").replace("PM","pm");
можно использовать
replaceAll()
метод, который использует regepxs, но я думаю, что выше, возможно, достаточно. Я не делаем одеялоtoLowerCase()
так как это может испортить форматирование, если вы измените строку формата в будущем, чтобы содержать (скажем) имена месяцев или подобный.изменить: решение Джеймс Jithin выглядит намного лучше, и правильный способ сделать это (как указано в комментариях)
это работает
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); } }
если вы не хотите делать подстановку строк и используете 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 по умолчанию, что делает это единственным способом, не требующим замены строки в последней строке.
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);
ответ Джеймса отлично подходит, если вы хотите другой стиль, отличный от стандартного am, pm. Но я боюсь, что вам нужно сопоставление между Locale и Locale specific AM/PM, настроенным на принятие переопределения. Теперь вы просто используете Java встроенный java.утиль.Класс форматирования. Поэтому простой пример выглядит так:
System.out.println(String.format(Locale.UK, "%1$tl%1$tp", LocalTime.now()));
это дает:
9pm
чтобы отметить, что если вы хотите верхний регистр, просто замените " %1$tp " с " %1$Tp". Вы можете найти более подробную информацию в 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()
Если вы хотите верхний регистр