java创建万年历,维护节假日信息

最近工作中需要用到万年历的节假日信息。所以就建了一张日历表来维护节假日信息。

因为之后年份的节假日信息在当前年份是没办法确定的需要等节假日发布之后才可以,所以我每次就是获取当年的节假日,然后用日期自增 判断自增的日期是不是在节假日里,如果没有就判断是不是周末,整体的逻辑还是比较简单的

    private static List<Calendar> list = new ArrayList<>();
    public static void main(String[] args) {

        // 获取节假日期
        test();

        LocalDateTime parse = LocalDateTimeUtil.parse("2022-01-01T12:23:56");
        StringBuilder sb = new StringBuilder("INSERT INTO `b_calendar`(`calendar_time`, `is_work`, `calendar_remarks`) VALUES (");

        FileAppender appender = new FileAppender(FileUtil.file("C:\\Users\\gzm\\Desktop\\日历.sql"), 16, true);
        int a = 0;
        while (true){
            sb = new StringBuilder("INSERT INTO `b_calendar`(`calendar_time`, `is_work`, `calendar_remarks`) VALUES (");

            sb.append("'");
            String format = LocalDateTimeUtil.format(parse, "yyyy-MM-dd");
            sb.append(format);
            sb.append("',");

            for (Calendar calendar : list) {
                if(StrUtil.equals(format,calendar.getDate())){
                    sb.append(calendar.getHoliday() ? 2 : 1);
                    sb.append(",'");
                    sb.append(calendar.getName());
                    sb.append("');");
                    a = 1;
                    break;
                }
            }

            if(a == 0){
                boolean weekend = LocalDateTimeUtil.isWeekend(parse);
                sb.append(weekend ? 2 : 1);
                sb.append(",'");
                sb.append(weekend ? "周末":"工作日");
                sb.append("');");
            }
            // 重置标记位,把sql写入文件
            a = 0;
            appender.append(sb.toString());

            LocalDateTime offset = LocalDateTimeUtil.offset(parse, 1, ChronoUnit.DAYS);

            if(offset.getYear() != parse.getYear()){
                break;
            }
            parse = offset;
        }
        appender.flush();
    }

    private static void test(){

        String result2 = HttpRequest.get("http://timor.tech/api/holiday/year/2022")
                .execute().body();
        JSONObject jsonObject = JSONUtil.parseObj(result2);
        JSONObject holiday = JSONUtil.parseObj(jsonObject.get("holiday"));
        HashMap hashMap = JSONUtil.toBean(holiday, HashMap.class);

        for (Object o : hashMap.keySet()) {
            Object o1 = hashMap.get(o);
            Calendar calendar = JSONUtil.toBean(JSONUtil.parseObj(o1), Calendar.class);
            list.add(calendar);
        }

        list.forEach(System.out::println);

    }

我这里的选择是拼接sql写到文件里由我拿着sql去数据库执行,也可以用定时任务每年一月一日把数据插入表里

@Data
public class Calendar {

    private Boolean holiday;
    private String name;
    private String date;
}

用到了hutool包里的一些工具类

        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.2</version>
        </dependency>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 实现万年历可以使用一些第三方库来获取节假日、阴历阳历等信息,例如 Lunar Calendar 和 Holiday API 等。具体实现步骤如下: 1. 获取用户选择的年份和月份。 2. 使用第三方库获取该月份的所有日期信息,包括阳历日期、阴历日期、节假日信息。 3. 根据获取到的信息,将该月份的所有日期及其对应的信息显示在界面上。 下面是一个简单的示例代码: ```java import com.github.louchen.zoom.api.calendar.CalendarService; import com.github.louchen.zoom.api.calendar.Holiday; import com.github.louchen.zoom.api.calendar.Lunar; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.List; public class CalendarDemo { public static void main(String[] args) { int year = 2022; int month = 1; Calendar calendar = Calendar.getInstance(); calendar.set(year, month - 1, 1); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); while (calendar.get(Calendar.MONTH) == month - 1) { Date date = calendar.getTime(); String dateString = sdf.format(date); Lunar lunar = CalendarService.getLunar(dateString); // 获取农历信息 List<Holiday> holidays = CalendarService.getHolidays(dateString); // 获取节假日信息 String lunarDateString = lunar.toString(); // 将农历信息转换为字符串 String holidayString = ""; // 节假日信息字符串 for (Holiday holiday : holidays) { holidayString += holiday.getName() + "\n"; } System.out.println(dateString + " 阳历 " + holidayString + "农历" + lunarDateString); calendar.add(Calendar.DAY_OF_MONTH, 1); } } } ``` 在这个示例代码中,我们使用了 `CalendarService` 这个第三方库来获取农历和节假日信息。需要注意的是,在使用该库之前,需要先申请相关的 API Key。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值