SimpleDateFormat не применяет TimeZone - PullRequest
1 голос
/ 15 апреля 2020

Я получаю данные от API, который возвращает следующую дату:

"2020-04-15T12:27:22.000Z"

Я использую этот метод для форматирования даты:

private fun formatarData(dataAtualizacao: String): String {
    var simpleDateFormat = SimpleDateFormat(
        "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",
        Locale.getDefault()
    )
    simpleDateFormat.timeZone = TimeZone.getDefault()
    val data = simpleDateFormat.parse(dataAtualizacao)
    return if (data != null) {
        simpleDateFormat = SimpleDateFormat("dd MMM yyyy - HH:mm", Locale.getDefault())
        simpleDateFormat.format(data)
    } else {
        getString(R.string.error)
    }
}

Ожидаемый результат был " 15 abr 2020 - 09:27 "но я получаю результат" 15 abr 2020 - 12:27 ".

Как исправить эту ошибку?

1 Ответ

2 голосов
/ 15 апреля 2020

Получив метку времени в зулу, вы должны проанализировать ее в этом часовом поясе.

Затем вы можете изменить часовой пояс при форматировании его в качестве локальной даты:

private fun formatarData(dataAtualizacao: String): String {
    var simpleDateFormat = SimpleDateFormat(
        "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",
        Locale.getDefault()
    )
    simpleDateFormat.timeZone = TimeZone.getTimeZone("UTC")
    val data = simpleDateFormat.parse(dataAtualizacao)
    return if (data != null) {
        simpleDateFormat = SimpleDateFormat("dd MMM yyyy - HH:mm", Locale.getDefault())
        simpleDateFormat.timeZone = TimeZone.getDefault()
        simpleDateFormat.format(data)
    } else {
        getString(R.string.error)
    }
}

, выполнив println(formatarData("2020-04-15T12:27:22.000Z")) print 15 abr. 2020 - 14:27, который является ожидаемым временем в моем местном часовом поясе GMT ​​+ 2.

...