Какая разница в использовании a и aaa в SimpleDateFormat - PullRequest
2 голосов
/ 05 мая 2011

Я хочу отобразить текущую дату как 00:50:32 A

Вот мой код

Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss a");
String time = sdf.format(date);
System.out.println("time : " + time);

Но это печатается как:

time : 00:50:32 AM

Я пробовал оба HH:mm:ss a и HH:mm:ss aaa, но результаты совпадают.

Ответы [ 5 ]

4 голосов
/ 05 мая 2011

Не могу сделать!Если шаблон состоит из 4 букв или менее, используется короткий формат.Таким образом, «a», «aa», «aaa» и «aaaa» идентичны.

Все, что вы можете сделать, это отформатировать его без «a» и добавить «A» или «P» вручную.

Сказав это, используя «ЧЧ» (24-часовой формат), зачем вам AM / PM?

3 голосов
/ 05 мая 2011

Я полагаю, что для маркеров am / pm нет разницы между "short" и "long".

В частности, DateFormatSymbols.getAmPmStrings() возвращает только две строки - и нет getShortAmPmStrings() Позвони или что-нибудь в этом роде.

1 голос
/ 05 мая 2011

Цитирование из Javadoc SimpleDateFormat :

Для форматирования, если количество букв шаблона составляет 4 или более, используется полная форма;в противном случае используется короткая или сокращенная форма, если она доступна

. Таким образом: (a) Если вы ожидаете увидеть разницу, используйте aaaa (4 x a) вместо aaa (4 xa).(b) Учитывая, что AM / PM не имеет краткой формы (или длинной формы), тогда для спецификатора a число повторений не имеет значения.

И чтобы быть более тщательным, я запустилследующая программа.Было найдено ноль случаев, когда форматирование было затронуто.

Date date = new Date();
int n = 0;
for (String country : Locale.getISOCountries()) {
  for (String language : Locale.getISOLanguages()) {
    Locale loc = new Locale(language, country);
    String as = "";
    String prev = null;
    for (int i = 0; i < 20; ++i) {
      ++n;
      as += "a";
      String current = new SimpleDateFormat(as, loc).format(date);
      if (prev != null && !prev.equals(current)) {
        System.out.println("Locale: " + loc + ", as=" + as + ", current="
          + prev + ", next=" + current);
      }

      prev = current;
    }
  }
}
System.out.println("Tried out " + n + " combinations.");    
0 голосов
/ 05 мая 2011

Тогда у вас есть опция

time = time.substring(0,time.length()-1);

:) Глупо, но работать будет

0 голосов
/ 05 мая 2011

Нет разницы, чем вы ожидали отличаться?

На основании этого сайта (http://javatechniques.com/blog/dateformat-and-simpledateformat-examples/):

«а» -> «АМ»

«аа» -> «АМ»

...