SimpleDateFormat из календаря UTC Ошибка, когда локаль арабская - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь преобразовать отметку времени в дату, которую затем помещаю в параметры запроса.

Вот функция, которая преобразует метку времени в дату:

override fun fromTimestamp(timestamp: Long): String {
    val tz = TimeZone.getTimeZone("UTC")
    val calendar = Calendar.getInstance(tz)
    calendar.timeInMillis = timestamp

    // Quoted "Z" to indicate UTC, no timezone offset
    val df = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
    df.timeZone = tz

    return df.format(calendar.time)
}

Кажется, что это прекрасно работает, когда мое устройство установлено на английском языке, после URL-кодировки даты, это то, чтоВ параметрах: 1970-01-01T00%3A00%3A00.000Z

Теперь, если мое устройство настроено на арабском языке, дата в кодировке URL выглядит следующим образом: %D9%A2%D9%A0%D9%A1%D9%A8-%D9%A1%D9%A0-%D9%A1%D9%A7T%D9%A1%D9%A9%3A%D9%A4%D9%A7%3A%D9%A1%D9%A9.%D9%A0%D9%A8%D9%A2Z

Я могу только предположить, что все эти символыПредполагается, что это целые числа, которые закодированы как арабские символы, изображающие дату

После некоторого поиска в Google я нашел это обсуждение , которое говорит об инициализации Календаря с помощью локали из США.Но, взглянув на код выше, вы заметите, что календарь инициализируется с UTC часовым поясом.

Я думаю, что календарь, созданный из часового пояса UTC, выбил бы целые числа вместо символов конкретного языка, изображающих целые числа, но я не совсем уверен, как система Android работает с этим.

Есть идеи о том, как я могу изменить свою функцию для представления календарных дат с целыми числами независимо от локали?

1 Ответ

0 голосов
/ 20 октября 2018

Моя ставка идет на

SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US)
...