【问题标题】:Display time without converting to local time zone显示时间而不转换为本地时区
【发布时间】:2020-05-25 04:48:35
【问题描述】:

我有一个 API 可以给我这个 JSON 响应

{
  "time": "2020-05-25T05:18:02.279842+01:00",
  "timezone_name": "LMT",
  "timezone": "Europe/London"
}

现在,我有 2 个问题。

  1. 将时间转换为日期对象。我使用了SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ"),但是给了我解析异常。我认为这是因为毫秒是 6 位数的 SSSSSS(279842)。所以我将这个2020-05-25T05:18:02.279842+01:00" 转换为2020-05-25T05:18:02.279+01:00",这很有效。我对字符串操作不满意。

  2. 当我从上面格式化日期时,我看到的是我当地时区的时间,而不是伦敦时间。我想我必须为时区中给出的日期对象设置时区。

总的来说,我只想将 txt 巧妙地解析为数据对象并显示给定时区的时间。

感谢您的投入。

【问题讨论】:

  • 只需获取您需要的数据,然后在您解析日期之前删除时区

标签: java android kotlin


【解决方案1】:

我最终得到了这个解决方案。

private fun format(str: String): String {
        // expected input format "2020-05-24T08:19:40.807726-05:00"
        try {
            val slits = str.split(".")
            val inputFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss")
            inputFormat.timeZone = TimeZone.getTimeZone(timezone/*"Europe/London"*/)

            val outputFormat = SimpleDateFormat("h:mm a")
            outputFormat.timeZone = inputFormat.timeZone
            return outputFormat.format(inputFormat.parse(slits[0])!!)
        } catch (e: Exception) {
            Log.e(MWLocationInfo::class.java.simpleName, e.stackTrace.toString());
        }
        return "-"
    }

【讨论】:

    【解决方案2】:

    关于 2 - SimpleDateFormat 总是以 JVM 本地时间返回时间,因此您需要将时区设置为 SimpleDateFormat 为

    TimeZone timeZone = TimeZone.getTimeZone("Europe/London");
    simpleDateFormat.setTimeZone(timeZone);
    

    SimpleDateFormat 现在是旧版,请考虑使用 java.time API(在 java 8 中引入)。使用 java.time API -

    ZonedDateTime zonedDateTime = ZonedDateTime.parse("2020-05-25T05:18:02.279842+01:00[Europe/London]");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-31
      • 1970-01-01
      • 2012-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多