当前位置: 首页 > article >正文

【工具类】获取日出日落时间的Java工具类

博主介绍:✌全网粉丝22W+,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌

技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物联网、机器学习等设计与开发。

感兴趣的可以先关注收藏起来,在工作中、生活上等遇到相关问题都可以给我留言咨询,希望帮助更多的人。

获取日出日落时间的Java工具类

为了获取日出和日落时间,你可以使用Java编写一个工具类,这个工具类可以调用一个提供日出日落时间的API。例如,你可以使用Sunrise-Sunset API,这是一个免费的、开源的API,可以返回给定地理位置的日出和日落时间。

以下是一个简单的Java工具类示例,它使用HTTP请求从Sunrise-Sunset API获取日出和日落时间:首先,确保你已经添加了HTTP客户端库到你的项目中。如果你使用的是Maven,你可以在pom.xml中添加以下依赖:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.13</version>
</dependency>

创建一个工具类 SunriseSunsetUtil

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;

import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class SunriseSunsetUtil {

    private static final String API_URL = "https://api.sunrise-sunset.org/json?lat=%s&lng=%s&formatted=0";

    public static String getSunriseSunset(double latitude, double longitude) throws IOException, ParseException {
        String url = String.format(API_URL, URLEncoder.encode(String.valueOf(latitude), StandardCharsets.UTF_8), URLEncoder.encode(String.valueOf(longitude), StandardCharsets.UTF_8));

        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
            HttpGet request = new HttpGet(url);
            HttpResponse response = httpClient.execute(request);

            int statusCode = response.getStatusLine().getStatusCode();
            if (statusCode == 200) {
                HttpEntity entity = response.getEntity();
                String jsonResponse = EntityUtils.toString(entity, StandardCharsets.UTF_8);

                JSONObject jsonObject = new JSONObject(jsonResponse);
                String status = jsonObject.getString("status");
                if ("OK".equals(status)) {
                    String sunrise = jsonObject.getString("results").getString("sunrise");
                    String sunset = jsonObject.getString("results").getString("sunset");

                    SimpleDateFormat sdfInput = new SimpleDateFormat("HH:mm:ss", Locale.ENGLISH);
                    SimpleDateFormat sdfOutput = new SimpleDateFormat("HH:mm", Locale.ENGLISH);

                    Date sunriseDate = sdfInput.parse(sunrise);
                    Date sunsetDate = sdfInput.parse(sunset);

                    return String.format("Sunrise: %s, Sunset: %s", sdfOutput.format(sunriseDate), sdfOutput.format(sunsetDate));
                } else {
                    throw new IOException("API error: " + jsonObject.getString("message"));
                }
            } else {
                throw new IOException("Failed to fetch data: HTTP error code " + statusCode);
            }
        }
    }

    public static void main(String[] args) {
        try {
            // Example usage:
            double latitude = 40.7128; // New York City latitude
            double longitude = -74.0060; // New York City longitude

            String sunriseSunset = getSunriseSunset(latitude, longitude);
            System.out.println(sunriseSunset);
        } catch (IOException | ParseException e) {
            e.printStackTrace();
        }
    }
}

说明:

API URL:API_URL 是Sunrise-Sunset API的URL,包含纬度和经度的占位符。
HTTP 请求:使用Apache HttpClient库发送HTTP GET请求到API。
JSON 解析:使用org.json库解析返回的JSON响应。
日期格式化:将返回的HH:mm:ss格式的日期时间转换为HH:mm格式。
错误处理:处理HTTP错误和API错误。

依赖:
Apache HttpClient库(用于HTTP请求)。
org.json库(用于JSON解析)。

注意:

确保你的项目能够访问外部网络。
根据你的项目配置,可能需要添加更多的错误处理和日志记录。
你可能还需要考虑时区问题,这里假设服务器返回的时间是UTC时间,并根据需要转换为本地时间。


好了,今天分享到这里。希望你喜欢这次的探索之旅!不要忘记 “点赞” 和 “关注” 哦,我们下次见!🎈

本文完结!

祝各位大佬和小伙伴身体健康,万事如意,发财暴富,扫下方二维码与我一起交流!!!在这里插入图片描述


http://www.kler.cn/a/505162.html

相关文章:

  • STM32-笔记40-BKP(备份寄存器)
  • Pytorch基础教程:从零实现手写数字分类
  • 79_Redis通信协议RESP
  • Unity中实现倒计时结束后干一些事情
  • 汽车免拆诊断案例 | 2007 款法拉利 599 GTB 车发动机故障灯异常点亮
  • 【STM32】HAL库USB实现软件升级DFU的功能操作及配置
  • 全网唯一的工具 苹果手机备忘录全自动导出备份
  • QT与基恩士PLC采用上位链路通信实现
  • Jmeter配置服务代理器 Proxy(二)
  • 云计算技术深度解析与代码实践
  • 机器学习实战33-LSTM+随机森林模型在股票价格走势预测与买卖点分类中的应用
  • Python AI教程之二十一:监督学习之支持向量机(SVM)算法
  • 「实战应用」如何为DHTMLX JavaScript 甘特图添加进度线
  • 深入剖析 Wireshark:网络协议分析的得力工具
  • 在 Go语言中一个字段可以包含多种类型的值的设计与接种解决方案
  • 如何修复Android上未安装的应用程序
  • 【声音场景分类--论文阅读】
  • 【Rust练习】28.use and pub
  • 【Qt】02-信号与槽函数
  • 全域数据资产管理平台 | SimbaFabric
  • git merge 压缩提交
  • 大模型微调|使用LoRA微调Qwen2.5-7B-Instruct完成文本分类任务
  • Unity|Tetris|俄罗斯方块复刻1(C#)
  • RK3588-NPU pytorch-image-models 模型编译测试
  • cursor重构谷粒商城01——为何要重构谷粒商城
  • 2025开年解读:AI面试 VS 传统面试本质上区别有哪些?