Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从JSON 5天预报中获取有关明天天气的数据_Java_Json_Datetime_Openweathermap - Fatal编程技术网

Java 从JSON 5天预报中获取有关明天天气的数据

Java 从JSON 5天预报中获取有关明天天气的数据,java,json,datetime,openweathermap,Java,Json,Datetime,Openweathermap,你好:我正在写一个电报机器人,显示今天和明天的天气。作为数据,我正在使用openweathermap.org 目前,我使用getTodaysWeather方法从JSON上获取Java对象的信息,并编写了以下代码: public class Weather { public static final String URL_SOURCE = "http://api.openweathermap.org/data/2.5/weather?q="; public static fina

你好:我正在写一个电报机器人,显示今天和明天的天气。作为数据,我正在使用openweathermap.org

目前,我使用getTodaysWeather方法从JSON上获取Java对象的信息,并编写了以下代码:

public class Weather {

    public static final String URL_SOURCE = "http://api.openweathermap.org/data/2.5/weather?q=";
    public static final String API_KEY = "&APPID=3ad54740fd37f3f14a3a32a09f09cd25";
    public static final String UNITS = "&units=metric";
    public static final String LANG = "&lang=ru";

    public static String getWeather(String message) throws IOException{

        URL url = new URL(URL_SOURCE + message + LANG + UNITS + API_KEY);

        InputStreamReader reader = new InputStreamReader(url.openStream());

        Scanner in = new Scanner((InputStream) url.getContent());
        String result = "";

        while (in.hasNext()) {
            result += in.nextLine();
        }

        OneDayWeather obj = null;
        Gson gson = new Gson();
        String json = result;

        obj = gson.fromJson(json, OneDayWeather.class);

        System.out.println("City " + obj.getName() + "(" + obj.getSys().getCountry()+ ")" + "today's "+ System.lineSeparator() +
                "Temperature: " + obj.getMain().getTemp() + "°C, " + System.lineSeparator()+
                "Humidity: " + obj.getMain().getHumidity() + "%, " + System.lineSeparator()+
                "Rain: " + obj.getWeather().get(0).getDescription()+ System.lineSeparator()+
                "Wind speed: " + obj.getWind().getSpeed() + " m/s";
    }
}
现在我需要编写一个方法,从这个JSON数据中获取明天的天气数据 如果我认为正确,我需要在数据中找到日期接近明天下午1:00的数据块,并获取有关温度、湿度、风等的信息。 每个区块以dt:1547672400开始。我想它的意思是不同格式的日期和时间。如果是这样,我需要找到正确的块并跳过另一个

不幸的是,我不知道如何实现这个方法。 如果有人能帮助我,我将非常感谢:

你能做的就是明天下午1:00到UTC,然后到unix时间戳。将此值存储为tomorrow13Unix

现在,对于列表中的每个预测,将其与tomorrow13Unix进行比较,如果相同,则找到了您要查找的内容

请注意,API将时间分为三个部分,因此您可能希望寻找不大于tomorrow13Unix的最大时间

以下是我将如何获得明天下午1点的大纪元时间:

long tomorrow13Unix = java.time.OffsetDateTime.now(java.time.ZoneOffset.UTC).with(java.time.LocalTime.of(13, 0)).plusDays(1).toEpochSecond();
笔记 以上将获得UTC的当前时间,将该时间截断为下午1点,然后再加上一天。这可能不是你想要的。您可能希望改为使用本地时间,增加一天,截断为下午1点,并将生成的时间转换为UTC,在这种情况下,您可能希望改为使用此时间:

long tomorrow13Unix = java.time.LocalDateTime.now().plusDays(1).with(java.time.LocalTime.of(13, 0)).toEpochSecond(java.time.ZoneOffset.UTC);

您应该正确阅读API文档,它们似乎有一个端点用于5天的预测API文档似乎很清楚:-list.dt预测数据时间,unix,UTCY您似乎知道如何解析JSON一般-这个特定结构的具体问题是什么?我读过了。不知道如何编写代码来查找明天13:00dt是UTC的unix时间。如果你不知道这是什么,那就查一下unix时间吧。我不能只设定1月17日下午1:00。该方法应执行以下操作:1获取当前日期2添加+1天3在JSON unix日期时间陷阱中搜索接近当前日期+1天+1:00pm的日期时间陷阱。这就是我的想法我所做的是:Calendar Calendar=Calendar.getInstance;Date today=calendar.getTime;calendar.addCalendar.DAY(一年中的)1;Date明天=calendar.getTime;System.out.printlnow;我想我需要写方法来找到明天下午1:00,今天是2019年1月17日下午1:00,明天是2019年1月18日下午1:00。但是怎么做呢?@MichaelBlala避免使用不推荐的日期工具。我更新了我的答案,以显示如何获取第二天的时间注意推荐java.time.*uties的使用