日期转换 24 小时和 12 小时 - Kotlin

时间:2021-05-26 01:52:38

标签: android date datetime kotlin datetime-format

我从服务器获取的日期低于 UTC 格式:

2021-05-20 09:14:55

现在,我必须将其转换为 24 小时格式和 12 小时格式的本地格式。

要将其转换为 24 小时格式,我已完成如下操作:

val df = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH)
df.timeZone = TimeZone.getTimeZone("UTC")
val date = df.parse(dataDate)
df.timeZone = TimeZone.getDefault()
val formattedDate = df.format(date)

得到的结果为:2021-05-20 14:44:55(本地 24 小时)

现在,我尝试使用 12 小时格式将相同日期转换为本地日期,如下所示:

val utc = TimeZone.getTimeZone("UTC")
val inputFormat: DateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss",
                Locale.ENGLISH)
inputFormat.timeZone = utc
val outputFormat: DateFormat = SimpleDateFormat("yyyy-MM-dd hh:mm:ss aa",
                Locale.ENGLISH)
outputFormat.timeZone = utc
val dateInput = inputFormat.parse(dataDate)
val output = outputFormat.format(dateInput)

它给我的输出为 2021-05-20 09:14:55 AM(本地 12 小时)

我认为这是错误的,只是将 AM 添加为后缀。这可能是错误的,因为如果 24 小时日期结果是 2021-05-20 14:44:55,那么 12 小时日期结果应该是 2021-05-20 02:44:55 PM< /strong>

可能是什么问题?

1 个答案:

答案 0 :(得分:1)

您使用 TimeZone.getDefault() 打印 24H 格式,使用 TimeZone.getTimeZone("UTC") 打印 12H 格式。

df.timeZone = TimeZone.getDefault()
val formattedDate = df.format(date)
outputFormat.timeZone = utc
val output = outputFormat.format(dateInput)

TimeZone.getDefault() 使用您的本地时区,在本例中不是 UTC。
使用本地时区作为 12H 格式,就像 24H 格式一样。

outputFormat.timeZone = TimeZone.getDefault()