У меня есть требование, при котором мне нужно визуализировать локализованную дату и время в текстовом представлении в макете Android. Дата и время возвращаются в формате ISO из сервисного вызова. Вот ответ JSON
{
"expiredTime": "2020-01-24T00:59:59.000-05:00",
. . . Other Keys and Values . . .
}
Это должно быть отображено в приложении Android внутри текстового представления. Что я хочу сделать, это показать локализованное время в приложении. Поэтому, если бы пользователь мог видеть на экране, скажем, в Нью-Йорке, истекшее время показывало бы 2020-01-24T00:59:59.000-05:00
, потому что время в полезной нагрузке принадлежит тому же часовому поясу, что и в Нью-Йорке. Точно так же, если бы я хотел отображать в GMT, время было бы показано как 2020-01-24T05:59:59.000-00:00
.
Как я могу правильно реализовать это в Android? Я сделал это, как показано ниже. Возвращенная дата передается экземпляру SimpleDateFormat
для возврата строки.
public static final Date parse(String dateTimeAsString) throws ParseException
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
{
DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE_TIME.withLocale(Locale.getDefault()));
try
{
LocalDate localDate = LocalDate.parse(value, formatter);
if (localDate != null)
return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
} catch (DateTimeParseException dtpe)
{
// If the format is invalid, then delegate to the other helper function.
}
}
return null;
}
Мои вопросы заключаются в следующем:
- Правильна ли моя реализация для получения локализованной даты? Если нет, то как бы я сделал это правильно?
- Как локализовать дату для Android версии ОС ниже Oreo? DateTimeFormatter доступен только в Android Oreo и выше.