【问题标题】:Convert UTC time recieved from weather api to local time将从天气 api 接收到的 UTC 时间转换为本地时间
【发布时间】:2020-08-19 16:36:17
【问题描述】:

我正在从以下位置调用当前天气 API 响应 https://openweathermap.org/current

API 响应具有如下所示的日落和日出值: “日出”:1560343627,“日落”:1560396563 参数单位写为Sunset time, Unix, UTC

我知道位置,现在我想将这个时间转换为该地点的当地时间。我该怎么做?

【问题讨论】:

标签: android timezone json-api-response-converter


【解决方案1】:

使用 java.time 类。

int millisSinceEpoch = Integer.parseInt( "1560343627" ) ;
Instant instant = Instant.ofEpochMilli( millisSinceEpoch ) ;

Instant 对象代表 UTC 中的一个时刻。您可以调整到时区,通过某个地区的人们使用的挂钟时间查看同一时刻。

ZoneId z = ZoneId.of( "Pacific/Auckland" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;

【讨论】:

    【解决方案2】:

    用于将时间戳转换为当前时间

    Calendar calendar = Calendar.getInstance();
    TimeZone tz = TimeZone.getDefault();
    calendar.add(Calendar.MILLISECOND, tz.getOffset(calendar.getTimeInMillis()));
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
    java.util.Date currenTimeZone=new java.util.Date((long)1379487711*1000);
    Toast.makeText(TimeStampChkActivity.this, sdf.format(currenTimeZone), Toast.LENGTH_SHORT).show();
    

    希望能成功

    谢谢!编码愉快!

    【讨论】:

    • 这些糟糕的日期时间类现在是遗留的,多年前被 JSR 310 中定义的现代 java.time 类所取代。
    【解决方案3】:
    public static String covertUnixToHour(int sunrise){
        Date date = new Date(sunrise* 1000L);
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
        String formatted = sdf.format(date);
        return formatted;
    }
    

    【讨论】:

    • 虽然此代码可以解决问题,including an explanation 说明如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 2018-07-27
    • 2012-02-29
    • 2014-07-18
    • 2021-02-04
    • 2010-09-15
    相关资源
    最近更新 更多