作为输入,我得到了一个类似HH:mm的字符串,它是UTC,但我需要将时间转换为+3小时(即UTC +3)。
例如,它是12:30 -它变成了15:30。
我试过这个代码,但它不工作:(
fun String.formatDateTime(): String {
val sourceFormat = SimpleDateFormat("HH:mm", Locale.getDefault())
sourceFormat.timeZone = TimeZone.getTimeZone("UTC")
val parsed = sourceFormat.parse(this)
val tz = TimeZone.getTimeZone("UTC+3")
val destFormat = SimpleDateFormat("HH:mm", Locale.getDefault())
destFormat.timeZone = tz
return parsed?.let { destFormat.format(it) }.toString()
}
我该怎么做?
3条答案
按热度按时间zdwk9cvp1#
Java.时间
java.util
Date-Time API及其格式化APISimpleDateFormat
已过时且容易出错。建议完全停止使用它们并切换到modern Date-Time API。使用java.time API的解决方案
使用
LocalTime#parse
解析给定的时间字符串,然后使用LocalTime#atOffset
将其转换为UTCOffsetTime
。最后一步是将此UTCOffsetTime
转换为偏移量为+03:00
的OffsetTime
,您可以使用OffsetTime#withOffsetSameInstant
完成此操作。请注意,您不需要
DateTimeFormatter
来解析时间字符串,因为它已经是ISO 8601,这是java.time
类型使用的默认格式。演示:
输出:
Online Demo
或者,
Online Demo
从**Trail: Date Time**了解有关现代日期-时间API的更多信息。
mkh04yzy2#
你可以使用
java.time
来完成这个任务,如果你只是想增加一个特定的小时数,你可以使用LocalTime.parse(String)
,LocalTime.plusHours(Long)
和DateTimeFormatter.ofPattern("HH:mm")
。输出为
15:30
。尝试使用
"22:30"
,您将得到"01:30"
作为输出。请注意,如果您不应该只添加三个小时,而是考虑到与UTC的偏移可能发生变化的真实的区,夏令时可能会导致问题。
jei2mxaa3#