【问题标题】:Unable to parse timezone string provided by twitter API [duplicate]无法解析 twitter API 提供的时区字符串 [重复]
【发布时间】:2017-11-17 09:39:19
【问题描述】:

Twitter 的用户时间线 API 在其响应负载中以两种不同的方式向我提供时区信息 - utc_offset(整数)和 time_zone(字符串)

例如 “utc_offset”:-18000, "time_zone": "东部时间(美国和加拿大)",

我打算通过我的 Spring 应用程序将时区字符串字段存储在 PostgreSQL 中,并希望以后能够使用相同的时间导出正确的时间戳。

这意味着我应该能够解析time_zone 字段以获取时区信息,但其格式不符合java.util.TimeZone 的预期。我试过了,因为它无法解析上述格式,所以它回退到 UTC。

是否有理解 twitter 给出的格式的 java 库?很难想象 Twitter 会在其提要中使用非标准时区格式。

注意:- 我正在寻找基于纯 Java 的解决方案,而不是 Rails

【问题讨论】:

  • 根据unicode-file,条目“”表示这个“时区”没有 DST-信息,也是(如偏移量)。
  • 你不能解析created_at 字段并从那里提取时区吗?
  • @Andremoniycreated_at 字段采用 UTC 格式
  • @MenoHochschild 我的错。我花了一些时间发现我需要的是一个 Java 解析器,它可以理解 time_zone 字段的格式。使用 UTC 和时区字符串中的时间戳,我应该能够在用户的本地时区恢复推文创建的实际时间。
  • 它们是 Rails 时区名称。有关详细信息,请参阅 dup 链接。

标签: java timezone twitter-timeline


【解决方案1】:
    DateTimeFormatter parser = DateTimeFormatter.ofPattern("zzzz");
    String timeZoneFromTwitter = "Eastern Time (US & Canada)";
    ParsePosition position = new ParsePosition(0);
    ZoneId zid = ZoneId.from(parser.parse(timeZoneFromTwitter, position));
    System.out.println(zid);

这会打印(至少在我的电脑上)

America/New_York

老实说,我不知道它对你有多大帮助,我承认它处于作弊的边缘。真正发生的是格式化程序仅解析“东部时间”并停止。这足以让它将时区识别为 America/New_York。 ParsePosition 用于指定我们不需要它来解析所有字符串。

你提到了java.util.TimeZone。我鼓励您放弃该课程及其朋友,它们早已过时。 java.time,现代 Java 日期和时间 API(也称为 JSR-310)通常更易于使用,那么您为什么不养成这个习惯呢?

【讨论】:

  • 很遗憾,这种方法不适用于 Twitter API 返回的可能性范围。
  • 我怀疑这一点。谢谢提供信息。 @MattJohnson
猜你喜欢
  • 1970-01-01
  • 2013-04-27
  • 2020-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-13
  • 2019-11-05
  • 2020-02-27
相关资源
最近更新 更多