日期将GMT添加到小时

问题描述 投票:0回答:3
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值添加到小时。

android date kotlin gmt localdate
3个回答
2
投票

不,你误会了。 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以了解有关InstantOffsetDateTimeZonedDateTime类的更多信息。

如果您将ThreeTenABP添加到Android项目,则可以在较旧的Android版本上使用java.time。这是java.time的后端端口的Android改编版。

链接


0
投票

尝试将locale添加到simpledateformat,与+3时区匹配。

val startHour = SimpleDateFormat("HH:mm", Locale.Germany).format(pickup.begin())

0
投票

你可以尝试这样的事情

我把'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将返回您当地时间

© www.soinside.com 2019 - 2024. All rights reserved.