Java 计算各个时区的Unix时间戳

Java 计算各个时区的Unix时间戳,java,android,timezone,unix-timestamp,timezone-offset,Java,Android,Timezone,Unix Timestamp,Timezone Offset,我正在构建一个Android应用程序,用于查询OpenWeatherMapAPI。在大多数情况下,一切都很顺利。问题是当我计算提要提供的unix时间戳时。时间戳是根据GMT设置的。因此,如果您住在伦敦,并查看下面的json提要了解东京当前的天气状况,您会给出误导性的“日出”信息,因为输出显示的是日出(unix值1457298145)=Sun,2016年3月6日21:02:25 GMT。日出是根据格林尼治标准时间或伦敦时间设定的。我如何使用下面的提要根据目标城市(东京)的当地时间而不是GMT计算日

我正在构建一个Android应用程序,用于查询OpenWeatherMapAPI。在大多数情况下,一切都很顺利。问题是当我计算提要提供的unix时间戳时。时间戳是根据GMT设置的。因此,如果您住在伦敦,并查看下面的json提要了解东京当前的天气状况,您会给出误导性的“日出”信息,因为输出显示的是日出(unix值1457298145)=Sun,2016年3月6日21:02:25 GMT。日出是根据格林尼治标准时间或伦敦时间设定的。我如何使用下面的提要根据目标城市(东京)的当地时间而不是GMT计算日出?这可以通过下面的json提要实现吗?用户可以选择世界上任何城市获取当前天气信息。接下来的挑战是根据用户用Java编程选择的城市提供日出信息

东京最新天气预报:

http://api.openweathermap.org/data/2.5/weather?id=1850147&appid=44db6a862fba0b067b1930da0d769e98
反馈响应:

    {
  "coord": {
    "lon": 139.69,
    "lat": 35.69
  },
  "weather": [
    {
      "id": 500,
      "main": "Rain",
      "description": "light rain",
      "icon": "10n"
    }
  ],
  "base": "cmc stations",
  "main": {
    "temp": 285.91,
    "pressure": 1026.25,
    "humidity": 97,
    "temp_min": 285.91,
    "temp_max": 285.91,
    "sea_level": 1030.08,
    "grnd_level": 1026.25
  },
  "wind": {
    "speed": 1.17,
    "deg": 174.003
  },
  "rain": {
    "3h": 0.1475
  },
  "clouds": {
    "all": 56
  },
  "dt": 1457361634,
  "sys": {
    "message": 0.0048,
    "country": "JP",
    "sunrise": 1457298145,
    "sunset": 1457340136
  },
  "id": 1850147,
  "name": "Tokyo",
  "cod": 200
}
我应该创建什么方法使

    public static String getSunriseTime(int timeStamp) {
    //What should I do here with the info from the feed above?
    }

您只需要将java Calendar对象的时区设置为Tokyo或其他任何地方。以下代码片段对我很有用:

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.TimeZone;

 class Xxx {
     public static void main(String[] args) {
        Calendar calendar = new GregorianCalendar(TimeZone.getTimeZone("Asia/Tokyo"));
        calendar.setTimeInMillis(1457298145 * 1000L);
        System.out.println(calendar.toString());
    }
}