日期加GMT到小时

时间:2019-04-10 08:09:57

标签: android date kotlin gmt localdate

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值添加到小时。

3 个答案:

答案 0 :(得分:2)

不,您误会了。 Wed Apr 10 10:00:00 GMT+03:00 2019java.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,以了解有关InstantOffsetDateTimeZonedDateTime类的更多信息。

如果将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将返回您的本地时间