val startHour = SimpleDateFormat("HH:mm").format(pickup.begin())
pickup.begin值是“Wed Apr 10 10:00:00 GMT + 03:00 2019”,所以我需要开始时间为10:00 + 3h - > 13:00,但我得到startHour值10: 00。
我不知道如何将GMT值添加到小时。
不,你误会了。 Wed Apr 10 10:00:00 GMT+03:00 2019
是(的文字表示)java.util.Date
,其值等于2019-04-10T07:00 UTC。看来您的默认时区是GMT + 03:00,而Date
正试图对您友好并在此时区打印时间,这就是它打印10:00:00的原因。无论您是想要UTC时间还是自己的默认时区,13:00肯定是不正确的。
从Date
返回的pickup.begin()
类设计很差并且已经过时了,因此您可能需要考虑是否可以返回来自java.time的类型,即现代Java日期和时间API。它也可能使问题更加清晰。
或者,将java.util.Date
对象转换为现代对象java.time.Instant
。寻找添加到旧类的新转换方法。
Instant instant = pickup.begin().toInstant() ; // Converting legacy `Date` object to modern `Instant` object.
搜索Stack Overflow并阅读Oracle Tutorial以了解有关Instant
,OffsetDateTime
和ZonedDateTime
类的更多信息。
如果您将ThreeTenABP添加到Android项目,则可以在较旧的Android版本上使用java.time。这是java.time的后端端口的Android改编版。
链接
尝试将locale添加到simpledateformat,与+3时区匹配。
val startHour = SimpleDateFormat("HH:mm", Locale.Germany).format(pickup.begin())
你可以尝试这样的事情
我把'date'作为字符串放在这里
String date="something"
val sdf = SimpleDateFormat("HH:mm")
sdf.timeZone = TimeZone.getTimeZone("UTC")
val gmt = sdf.parse(date)
如果这是你的情况
Date date="somevalue"
然后
val gmt = sdf.format(date)
gmt将返回您当地时间