栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java实现万年历的简单功能

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java实现万年历的简单功能

import java.util.Scanner;


public class Calendar {

    static Scanner sc = new Scanner(System.in);
    static boolean tf;

    public static void main(String[] args) {
        System.out.println("请输入你想要查看的年份:");
        int year = sc.nextInt();
        System.out.println("请输入你想要查询的月份:");
        int month = sc.nextInt();
        tf = (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0));
        // 接收定义年到指定年的天数数据
        int years = yearNumber(year);
        // 接收一月1日到指定月的天数数据
        int months = monthNumber(month);
        sc.close();
        // 计算2001年之前某年某月的第一天是星期几
        if (year < 2001){years = 6 - (years % 7);}
        // 将年天数和月天数相加得到2001年到指定年月的天数
        int numbers = years + months;
        // 输出上面的星期数
        week();
        System.out.println();
        // 输出日历数字
        printNumber(numbers, month);
    }

    
    private static void printNumber(int numbers, int month) {
        switch (month) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                // 计算在星期几开始输出1号
                for (int i = 0; i < (numbers % 7); i++) {
                    System.out.print("t");
                    System.out.print("t");
                }
                for (int i = 1; i <= 31; i++) {
                    System.out.print("t");
                    if (i < 10){System.out.print("0");}
                    System.out.print(i);
                    System.out.print("t");
                    if (((numbers + i) % 7) == 0){System.out.println();}
                }
                break;
            case 2:
                for (int k = 0; k < (numbers % 7); k++) {
                    System.out.print("t");
                    System.out.print("t");
                }
                int number = 28;
                int k = 1;
                if (tf){number += 1;}
                while (k < number){
                    System.out.print("t");
                    if (k < 10){System.out.print("0");}
                    System.out.print(k);
                    System.out.print("t");
                    if (((numbers + k) % 7) == 0){System.out.println();}
                    k++;
                }
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                for (int j = 0; j < (numbers % 7); j++) {
                    System.out.print("t");
                    System.out.print("t");
                }
                for (int j = 1; j < 30; j++) {
                    System.out.print("t");
                    if (j < 10){System.out.print("0");}
                    System.out.print(j);
                    System.out.print("t");
                    if (((numbers + j) % 7) == 0){System.out.println();}
                }
                break;
            default:break;
        }
    }

    
    private static int monthNumber(int month) {
        int number = 0;
        for (int i = 1; i < month; i++) {
            number += 30;
            switch (i){
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    number += 1;
                    break;
                case 2:
                    if (tf){
                        number -= 1;
                    }else {
                        number -= 2;
                    }
                    break;
                default:break;
            }
        }
        return number;
    }

    
    private static int yearNumber(int year) {
        int number = 0;
        if (year > 2001){
            for (int i = 2001; i < year; i++) {
                number += 365;
                if (((i % 4 == 0) && (i % 100 != 0)) || (i % 400 == 0)){number += 1;}
            }
        }else {
            for (int i = 2001; i > year; i--) {
                number += 365;
                if (((i % 4 ==0) && (i % 100 != 0)) || (i % 400 == 0)){number += 1;}
            }
        }
        return number;
    }

    
    private static void week() {
        String[] weeks = new String[] {"星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
        for (String week : weeks) {
            System.out.print(week);
            System.out.print("t");
        }
    }
}

这里我定义的是2001年的一月1号,这一天是星期一,这样为了后面的计算做准备。

然后从控制台获取客户想要查询的年份和月份,这样我们就可以计算出他要查询的那一个月的1号是星期几了,这样我们就可以控制当月1号在星期几开始输出;

计算我们初始定义的年份到要查询的年份的月份的天数,分两步计算,先计算2001年的1月1日到查询年的1月1日有多少天,然后计算查询年的1月1日到查询月的1日有几天,将两个数据相加余7就可以得到我们想要的结果。

然后要向前推算的话,用余7来计算的话就会出错,因为这样推过去是要反着推,所以就先计算出2001年1月1日到所要查询的那一年的1月1日的天数,然后将它余7,再用6减去这个余数,最后用这个余数加上这一年1月1日到要查询的那一个月的1号余7就可以得到我们想要的结果,最后将它输出就好了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/273759.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号