日期将格林威治标准时间添加到小时

Date add GMT to hour

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

pickup.begin 值为“4 月 10 日星期三 10:00:00 GMT+03:00 2019”,因此我需要开始时间为 10:00 +3h -> 13:00,但我得到 10:00.

的 startHour 值

我不知道如何将 GMT 值添加到小时。

尝试将区域设置添加到您的简单日期格式,以匹配 +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(日期)

格林威治标准时间 return 您的当地时间

不对,你误会了。 Wed Apr 10 10:00:00 GMT+03:00 2019java.util.Date 的(文本表示),其值等于 2019-04-10T07:00 UTC。看来你的默认时区是 GMT+03:00,而 Date 试图对你友好并打印这个时区的时间,这就是它打印 10:00:00 的原因。 13:00 无论您想要 UTC 时间还是您自己的默认时区时间,都肯定是不正确的。

pickup.begin() 返回的 Date class 设计不佳且早已过时,因此您可能需要考虑来自 java.time 的类型,现代 Java 日期和时间 API,可以改为返回。这也可能使事情更清楚。

或者,将该 java.util.Date 对象转换为其现代对象 java.time.Instant。寻找添加到旧 classes 的新转换方法。

Instant instant = pickup.begin().toInstant() ;  // Converting legacy `Date` object to modern `Instant` object. 

搜索 Stack Overflow 并阅读 Oracle Tutorial 以了解有关 InstantOffsetDateTimeZonedDateTime class 的更多信息。

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

向后移植的 Android 改编版

链接

  • ThreeTenABP、Android ThreeTen Backport 版
  • ,解释的很透彻。