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值添加到小时。
答案 0 :(得分:2)
不,您误会了。 Wed Apr 10 10:00:00 GMT+03:00 2019
是java.util.Date
的(文字表示),其值等于UTC 2019-04-10T07:00。看来您的默认时区是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.
搜索堆栈溢出并阅读Oracle Tutorial,以了解有关Instant
,OffsetDateTime
和ZonedDateTime
类的更多信息。
如果将ThreeTenABP添加到Android项目,则可以在较旧的Android版本上使用java.time。这是Android对java.time反向端口的改编。
链接
答案 1 :(得分:0)
尝试将语言环境添加到您的simpledateformat中,以匹配+3时区。
val startHour = SimpleDateFormat("HH:mm", Locale.Germany).format(pickup.begin())
答案 2 :(得分: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将返回您的本地时间