java获取每年所有月份的的周六日的日期

该博客展示了如何使用Java编程语言通过Calendar类和SimpleDateFormat来获取2018年每个周六和周日的日期,适用于日期处理和时间序列分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求如题

/**
     * 计算周六日
     * @param args
     * @throws ParseException
     */
    public static void main(String[] args) throws ParseException {
        int year = 2018;
        List<String> dateList=new ArrayList<String>();
        SimpleDateFormat simdf = new SimpleDateFormat("yyyy-MM-dd");
        Calendar calendar = new GregorianCalendar(year, 0, 1);
        int i = 1;
        while (calendar.get(Calendar.YEAR) < year + 1) {
            calendar.set(Calendar.WEEK_OF_YEAR, i++);
            calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
            if (calendar.get(Calendar.YEAR) == year) {
                System.out.println("周日:"+simdf.format(calendar.getTime()));
                dateList.add(simdf.format(calendar.getTime()));
            }
            calendar.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
            if (calendar.get(Calendar.YEAR) == year) {
                System.out.println("周六:"+simdf.format(calendar.getTime()));
                dateList.add(simdf.format(calendar.getTime()));
            }
        }
        
        System.out.println(dateList.size());
    }

转自:https://blog.youkuaiyun.com/cymlancy/article/details/85066556

### Java获取日历上的工作日和节假日的方法 #### 使用 `HashMap` 存储并查询节假日信息 为了有效地管理和查询节假日,在 Java 中可以利用 `HashMap` 数据结构来存储节假日的具体日期及其名称。这种方法不仅能够快速检索特定日期是否为节假日,还便于后续维护和扩展。 ```java import java.util.HashMap; public class HolidayManager { private static final HashMap<String, String> holidays = new HashMap<>(); public static void initializeHolidays() { // 初始化一些常见的中国法定节假日作为例子 holidays.put("0101", "元旦"); holidays.put("0214", "情人节"); holidays.put("0501", "劳动节"); holidays.put("1001", "国庆节"); // 更多节假日可以根据需求添加到这里... } /** * 判断给定日期是否为已知的节假日. * * @param date 传入格式应为 MMdd 的字符串表示形式 */ public static boolean isHoliday(String date) { return holidays.containsKey(date); } } ``` 这段代码定义了一个名为 `initializeHolidays()` 的方法用于初始化一系列固定的节假日条目,并提供了一个简单的 API (`isHoliday`) 来判断某一天是不是节日[^1]。 #### 结合 `Calendar` 类处理具体份中的节假日 考虑到不同份可能有不同的放假安排(比如春节假期),因此还需要考虑动态加载每年特有的假日列表。此时可以通过读取外部配置文件或调用第三方API服务的方式获得最新的官方发布的放假通知,再将其加入到上述静态映射表中去。 对于具体的每一天来说,则可通过 `java.util.Calendar` 或者更现代的时间库如 `java.time.LocalDate` 来操作时间对象: ```java import java.text.SimpleDateFormat; import java.util.Date; // ...其他导入语句... /** * 获取当前月份内的所有休息日(周末+法定假日). */ private List<Date> getRestDaysOfMonth(int year, int monthOfYear) { Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, year); cal.set(Calendar.MONTH, monthOfYear); Date firstDayOfMonth = cal.getTime(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); ArrayList<Date> restDays = new ArrayList<>(); do { if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY || cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY || HolidayManager.isHoliday(sdf.format(cal.getTime()).substring(4))) { // 检查该天是否为节假日 restDays.add(cal.getTime()); } cal.add(Calendar.DATE, 1); // 移动至下一天 } while (!sdf.format(cal.getTime()).startsWith(sdf.format(firstDayOfMonth).substring(0, 6))); return restDays; } ``` 此函数会遍历指定内每天的情况,如果遇到周六周日或者是之前提到过的固定节假日就会记录下来返回给调用方[^2]。 #### 计算工作日数量 有了上面的基础之后计算两个日期间的工作日就变得简单多了——只需要排除掉所有的非工作日即可: ```java public long countWorkdaysBetween(LocalDate startInclusive, LocalDate endExclusive) { long daysBetween = ChronoUnit.DAYS.between(startInclusive, endExclusive); Stream<LocalDate> datesStream = Stream.iterate(startInclusive, d -> !d.equals(endExclusive), d -> d.plusDays(1)); return daysStream.filter(d -> !(d.getDayOfWeek().equals(DayOfWeek.SATURDAY)) && !(d.getDayOfWeek().equals(DayOfWeek.SUNDAY)) && !HolidayManager.isHoliday(new SimpleDateFormat("MMdd").format(Date.from(d.atStartOfDay(ZoneId.systemDefault()).toInstant())))) .count(); } ``` 这里采用了流式编程风格来进行过滤筛选符合条件的日子,最终统计出总数[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值