日期将 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 2019java.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 以了解有关 InstantOffsetDateTimeZonedDateTime 类的更多信息。

如果您将 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 添加到小时的主要内容,如果未能解决你的问题,请参考以下文章

创建日期会自动将一小时添加到我的输入日期

如何将日期标头添加到 WebRequest

Google Apps 脚本 - 将 n 小时添加到当前时间和日期

Python将小时数添加到数据框的日期时间索引[重复]

从当前日期获取 GMT 字符串

编写此查询以将小时添加到日期的最简洁方法