Когда я использую флаг "HH" в android.text.format.DateFormat
, он интерпретируется как буква "HH" . Но когда я использую java.text.SimpleDateFormat
, это интерпретируется как 2-значный Час. Почему они разные?
Я не ищу рабочую альтернативу (я уже знаю, что мне нужно использовать kk
вместо HH
). Мне просто интересно, почему "HH" не распознается.
Пример Java:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Calendar calendar = Calendar.getInstance();
String dateJava = new java.text.SimpleDateFormat(
"dd-MM-yyyy HH:mm:ss").format(calendar.getTime());
String dateAndroid = android.text.format.DateFormat.format(
"dd-MM-yyyy HH:mm:ss", calendar).toString();
TextView tvAndroid = (TextView) findViewById(R.id.tvAndroid);
TextView tvJava = (TextView) findViewById(R.id.tvJava);
tvAndroid.setText("Android: " + dateAndroid); //prints 26-05-2013 HH:36:34
tvJava.setText("Java: " + dateJava); //prints 26-05-2013 22:36:34
}
Выход:
Android: 26-05-2013 HH:36:34
Java: 26-05-2013 22:36:34
Я ожидаю, что оба будут 26-05-2013 22:36:34
Есть ли у Android DateFormat ошибка?
Java SimpleDateFormat принимает следующие значения:
H Hour in day (0-23) Number 0
k Hour in day (1-24) Number 24
K Hour in am/pm (0-11) Number 0
h Hour in am/pm (1-12) Number 12
Итак, разработчики Android решили изменить значение k
, а в их функции DateFormat он эквивалентен SimpleDateFormat H
, как они явно указывают на странице документации :
This constant was deprecated in API level 18. Use a literal 'H' (for
compatibility with SimpleDateFormat and Unicode) or 'k' (for compatibility
with Android releases up to and including Jelly Bean MR-1) instead. Note
that the two are incompatible.
В чем причина этого?