日期将 GMT 添加到小时
Posted
技术标签:
【中文标题】日期将 GMT 添加到小时【英文标题】:Date add GMT to hour 【发布时间】:2019-08-31 15:01:48 【问题描述】: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 值添加到小时。
【问题讨论】:
pickup
的类型是什么?
对不起,pickup.begin()
* 返回的类型是什么?
final @Nullable Object begin; /** * The datetime the range begins. */ public @Nullable Object begin() return this.begin;
。它来自生成的类
您需要将其转换为您的当地时间
顺便考虑扔掉长期过时且臭名昭著的麻烦SimpleDateFormat
和朋友,并将ThreeTenABP添加到您的android项目中,以便使用java.time
,现代Java日期和时间API .使用起来感觉好多了。
【参考方案1】:
不,你误会了。 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 肯定是不正确的。
从pickup.begin()
返回的Date
类设计不佳且早已过时,因此您可能需要考虑是否可以返回来自现代Java 日期和时间API 的java.time 的类型。它也可能使事情变得更清楚。
或者,将 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 backport的Android适配。
链接
ThreeTenABP,Android 版 ThreeTen Backport Question: How to use ThreeTenABP in Android Project,解释得很透彻。【讨论】:
【参考方案2】:尝试将区域设置添加到您的简单日期格式中,以匹配 +3 时区。
val startHour = SimpleDateFormat("HH:mm", Locale.Germany).format(pickup.begin())
【讨论】:
不会有任何区别。区域设置和时区是独立的概念。【参考方案3】:你可以试试这样的
我在这里把“日期”作为字符串
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 将返回您的当地时间
【讨论】:
好吧,这添加了我的 GMT +2,而不是来自服务器的 GMT 响应 +3 这些糟糕的日期时间类在几年前被现代 java.time 类所取代,并采用了 JSR 310。以上是关于日期将 GMT 添加到小时的主要内容,如果未能解决你的问题,请参考以下文章