Java 万年历、周六日计算、节假日导出

news2024/10/1 19:23:29

目录

通过 Java 的基本语法来实现万年历

Java 获取一年中所有的周六和周日

Java 节假日导入导出


通过 Java 的基本语法来实现万年历

        在 Java 的时间计算方面还有很多好用的工具类,Java 常用的工具类封装框架链接如下:HUTool 框架官网

package com.taier.pulsar.date_utils;

import java.util.Scanner;

/**
 * @author swadian2008
 */
public class DateUtils {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入年:");
        int year = sc.nextInt();
        System.out.println("请输入月份:");
        int month = sc.nextInt();
        //1.计算1900.1.1到输入年的天数
        int dayOfYear = 0;
        for (int i = 1900; i < year; i++) {
            if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) { // 闰年
                dayOfYear += 366;
            } else {
                dayOfYear += 365;
            }
        }
        //2.计算1月到输入月的天数
        int dayOfMonth = 0;
        for (int i = 1; i < month; i++) {
            switch (i) {
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    dayOfMonth += 31;
                    break;
                case 4:
                case 6:
                case 9:
                case 11:
                    dayOfMonth += 30;
                    break;
                case 2:
                    if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) {
                        dayOfMonth += 29;
                    } else {
                        dayOfMonth += 28;
                    }
                    break;
            }
        }
        //3.获取输入月的天数
        int day = 0;
        switch (month) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                day = 31;
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                day = 30;
                break;
            case 2:
                if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) {
                    day = 29;
                } else {
                    day = 28;
                }
                break;
        }
        //4.计算星期
        int allDay = dayOfYear + dayOfMonth + 1;
        int week = allDay % 7; // 计算余数在星期中的位置
        int count = 0;// 计数器,记录日期的空格

        System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
        //5.打印空格
        for (int i = 1; i <= week; i++) {
            System.out.print("\t\t\t");
            count++;
        }
        //6. 打印日历
        for (int i = 1; i <= day; i++) {
            if (i < 10) { // 为了格式化
                System.out.print(i + "\t\t\t");
            } else {
                System.out.print(i + "\t\t");
            }
            count++;
            //若记录数是七的倍数,换行输出
            if (count % 7 == 0) {
                System.out.println();
            }
        }
    }
}

        打印效果如下:

Java 获取一年中所有的周六和周日

        下边的示例中使用了一个Map来收集周六和周日,可以根据需要进行调节:

import static java.time.temporal.TemporalAdjusters.firstInMonth;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.Month;
import java.time.Period;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.stream.Collectors;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;

/**
 * @author swadian2008
 */
public class WeekDay {

    public static void main(String[] args) {
        // 创建代表一年中第一天的LocalDate对象。
        int year = 2023;
        LocalDate now = LocalDate.of(year, Month.JANUARY, 1);
        Map<String, List<Integer>> weekMap = new HashMap<>(12);
        // 第一个星期六
        LocalDate saturday = now.with(firstInMonth(DayOfWeek.SATURDAY));
        do {
            String satMonth = String.valueOf(saturday.getMonthValue());
            if (CollectionUtils.isEmpty(weekMap.get(satMonth))) {
                weekMap.put(satMonth, new ArrayList<>(Arrays.asList(saturday.getDayOfMonth())));
            } else {
                List<Integer> values = weekMap.get(satMonth);
                values.add(saturday.getDayOfMonth());
                Collections.sort(values);
                weekMap.put(satMonth, values);
            }
            // 迭代一个星期
            saturday = saturday.plus(Period.ofDays(7));
        } while (saturday.getYear() == year);
        // 第一个星期天
        LocalDate sunday = now.with(firstInMonth(DayOfWeek.SUNDAY));
        do {
            String sunMonth = String.valueOf(sunday.getMonthValue());
            if (CollectionUtils.isEmpty(weekMap.get(sunMonth))) {
                weekMap.put(sunMonth, new ArrayList<>(Arrays.asList(sunday.getDayOfMonth())));
            } else {
                List<Integer> values = weekMap.get(sunMonth);
                values.add(sunday.getDayOfMonth());
                Collections.sort(values);
                weekMap.put(sunMonth, values);
            }
            // 迭代一个星期
            sunday = sunday.plus(Period.ofDays(7));
        } while (sunday.getYear() == year);

        Map<String, List<Integer>> sortWeekMap = weekMap.entrySet().stream().sorted((e1, e2) ->
            Integer.compare(Integer.parseInt(e1.getKey()), Integer.parseInt(e2.getKey())))
            .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1,
                LinkedHashMap::new));
        for (Entry<String, List<Integer>> map : sortWeekMap.entrySet()) {
            System.out.println(map.getKey() + "月:" + map.getValue().toString());
        }
    }
}

        打印效果如下:

Java 节假日导入导出

        Java 节假日导入导出会要操作一些 excel 文件,推荐使用 Easy Excel

        使用该框架后,就不再需要写原生的 POI 了,而且在数据量方面也提供了相关的解决方案。

        因为周六日的获取方法上文已经提供,其他节假日都是手动导入,因为节假日的导入导出重点在于 POI 操作 ,并非本文重点,且 easy excel 文档已经提供了详细的操作说明,所以此处只提供方案,就不提供具体代码了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/348266.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业降本增效的催化剂:敏捷迭代

伴随着开源技术的大爆发&#xff0c;新一代的软件技术如雨后春笋般层出不穷。每家企业在硬件及软件开发上都有许多开源技术可选&#xff0c;目的还是在于提高效率&#xff0c;降低开发成本。 本篇文章&#xff0c;带大家了解下促进企业降本增效的重要理念&#xff1a;敏捷迭代…

前端错误/性能监控(vue)

配置目录结构 错误监听&#xff1a;可以提前发现前端的错误&#xff0c;并且找到对应的位置进行修改。因为等等环境因素可能导致不同的问题&#xff0c;这些问题难以发现&#xff0c;影响用户体验。 性能监听&#xff1a;可以及时发现问题&#xff0c;比如下载的js文件、image时…

Stream流源码分析及技巧(含大量案例)

Stream流源码分析及技巧&#xff08;含大量案例&#xff09; 目录 Stream流源码分析及技巧&#xff08;含大量案例&#xff09; 更新说明 简介&#xff08;这部分摘了部分官方文档&#xff09; 特性 Stream接口关系图 Stream流接口方法 Stream流之间的转换 与Stream流相…

华为OD面试经验分享,尤其注意机试题部分

文章目录招聘流程和背景介绍面试准备机试题目类型和解答技巧在算法部分在操作系统部分面试官提问和答题技巧面试总结和建议推荐一些华为 od 常见的机试题题目&#xff1a;两数之和题目&#xff1a;二叉树的遍历题目&#xff1a;链表反转题目&#xff1a;最大子序和招聘流程和背…

解决QML debugging is enabled.Only use this in a safe environment.警告

系列文章目录 文章目录系列文章目录前言一、警告原因二、解决办法参考前言 我试图运行一个非常简单的程序&#xff0c;当单击退出按钮时关闭窗口&#xff0c;但获取以下输出&#xff0c;前提是包含按钮的应用程序窗口不显示&#xff1a; 您已启用QML调试(实际上它默认启用)&…

CleanMyMac4.12.5最新版Mac系统清理优化工具

CleanMyMac X可以优化Mac系统。mac系统用久了&#xff0c;用CleanMyMac清理一下效果还不错。可用来清理系统的缓存、日志、语言和垃圾文件&#xff0c;还能卸载应用程序。小编给您带来cleanmymac中文版&#xff0c;CleanMyMac是一款Mac系统清理优化工具&#xff0c;使用只需两个…

Java中Synchronized关键字的基本使用方法

Java中Synchronized关键字的基本使用方法 1.简介 Synchronized是java的关键字&#xff0c;synchronized可以保证在同一个时刻&#xff0c;只有一个线程可以执行某个方法或者某个代码块(主要是对方法或者代码块中存在共享数据的操作)&#xff0c;synchronized可保证一个线程的变…

动态规划【Day01】| 669 · 换硬币、114 · 不同的路径、116 · 跳跃游戏

秘诀&#xff1a;确定状态转移方程初始条件和边界情况计算顺序 669 换硬币 669 换硬币 题目描述&#xff1a; 给出不同面额的硬币以及一个总金额. 写一个方法来计算给出的总金额可以换取的最少的硬币数量. 如果已有硬币的任意组合均无法与总金额面额相等, 那么返回 -1。 样…

元宇宙将如何彻底改变 K-12 和高等教育

欢迎来到Hubbleverse &#x1f30d; 关注我们 关注宇宙新鲜事 &#x1f4cc; 预计阅读时长&#xff1a;9分钟 本文仅代表作者个人观点&#xff0c;不代表平台意见&#xff0c;不构成投资建议。 想象一下&#xff0c;你将作为一个微小的细胞去参观人类的循环系统。这只是元宇…

基于django搭建简单的个人博客

文章目录第一步、在Ubuntu中安装虚拟环境并进入第二步、安装blog所需要的包&#xff0c;在requirements.txt中安装mysqlclient可能会报错&#xff0c;输入下列命令后在安装即可成功第三步、创建好数据库&#xff0c;把测试数据导入第四步、修改DjangoBlog包中 settings中数据库…

企业如何做好EHS环境健康安全管理?

目前随着传统制造业企业安全管理制度的落实&#xff0c;工人的安全意识得到很大的提升&#xff0c;但企业内部的安全管理制度并不能完全避免意外发生。如受限空间人员闯入、特种设备伤人、人员作业不规范、危化品泄露、仓储车间发生火情、有毒有害气体超标等一系列安全隐患。对…

leaflet 修改popup的样式,个性化弹窗(069)

第069个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中修改popup组件的样式,个性化弹窗。主要方法是更改css, 中增加custom-popup类名,style的样式要做穿透处理 >>>.具体方法请参考源代码。 直接复制下面的 vue+leaflet源代码,操作2分钟即可运行实…

使用Python绘制股票CCI指标曲线

本文使用Python语言绘制一只股票的CCI&#xff08;Commodity channel index&#xff09;曲线&#xff0c;论文参考《Commodity channel index: Tool for trading cyclic trends》&#xff0c;该指标可以用来测量股价、外汇或者贵金属交易是否已超出常态分布范围&#xff0c;​ …

MYSQL数据库-主从复制(原理及搭建)

文章目录1 概述2 原理3 搭建3.1 主库配置3.2 从库配置1 概述 主从复制是指将主数据库的DDL和 DML操作通过二进制日志传到从库服务器中&#xff0c;然后在从库上对这些日志重新执行(也叫重做)&#xff0c;从而使得从库和主库的数据保持同步。 MySQL支持一台主库同时向多台从库进…

周立功ZCANPRO基础使用教程

软件及驱动安装 1.安装ZCANPRO软件 ZCANPRO软件官网:USB接口CAN卡-广州致远电子股份有限公司 点击资料下载: 2.安装驱动 本人使用的USBCANFD-200U设备,大家可根据自己的设备下载对应的驱动。 设备驱动官网链接:https://manual.zlg.cn/web/#/42/2462 软件使用教程 1.选择…

嵌入式开发:你需要知道的5种简单

传达嵌入式软件体系结构设计意图通常伴随着基于嵌入式开发人员经验的假设。你可以从资源受限的基于微控制器的系统的角度来看架构设计。如何设计架构将取决于系统的嵌入式软件分类。有许多不同的方法可以对嵌入式软件进行分类。我发现有五种简单的嵌入式软件分类可以帮助我调整…

字符串内存分配

涉及三块区域&#xff1a;栈&#xff0c;堆&#xff0c;字符串常量池&#xff08;jdk1.7之前在方法区&#xff0c;jdk1.7之后在堆中&#xff09; 关于字符串常量池到底在不在堆中&#xff1a; jdk1.6及以前&#xff0c;方法区独立存在&#xff08;不在堆里面&#xff09;&…

达梦数据库监控指标

一、达梦数据库监控指标 数据库常见性能指标主要有:当前登录数、非阻塞锁数、当前死锁数、阻塞锁数、当前锁数、会话数等内容,如下图所示。 注意:以下是 达梦数据库监控所需要的指标,具体根据需要监控哪些、超阈值而定。 1.1 新建主机群组 1.2 新建模板 1.3 创建主机 1.…

【Airplay_BCT】Bonjour API架构

Bonjour API 架构 OS X 和 iOS 为 Bonjour 服务应用程序提供了多层应用程序编程接口 (API)&#xff1a; Foundation 框架中的 NSNetService 和 NSNetServiceBrowser 类&#xff1b; CFNetServices&#xff0c;Core Services 中 CFNetwork 框架的一部分&#xff1b; Java 的 DN…

如何在现实场景中随心放置AR虚拟对象?

随着AR的发展和电子设备的普及&#xff0c;人们在生活中使用AR技术的门槛降低&#xff0c;比如对于不方便测量的物体使用AR测量&#xff0c;方便又准确&#xff1b;遇到陌生的路段使用AR导航&#xff0c;清楚又便捷&#xff1b;网购时拿不准的物品使用AR购物&#xff0c;体验更…