`

算法:日历

 
阅读更多
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

public class $ {

    private static int[] DAYS = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

    public static void main(String... _) {

        long l1 = System.currentTimeMillis();
        List data = rili(1000, 1, 10000, 12);
        long l2 = System.currentTimeMillis();

        for (int i = 0; i < data.size(); i++) {
            System.out.println(data.get(i));
        }
        System.out.println((l2 - l1) + "MS");
    }

    private static List rili(int startYear, int startMonth, int endYear, int endMonth) {

        if (startYear > endYear || (startYear == endYear && startMonth > endMonth)) {
            return null;
        }
        List data = new ArrayList();

        for (int ii = startYear; ii <= endYear; ii++) {

            int startM = startMonth - 1;
            int endM = endMonth - 1;

            if (startYear < endYear) {
                if (ii == endYear) {
                    endM = 11;
                } else {
                    startM = 0;
                }
            }
            for (int i = startM; i <= endM; i++) {
                data.add("-----------------------" + ii + "年" + (i + 1) + "月-----------------------");
                data.add("日\t一\t二\t三\t四\t五\t六");

                int day = days(ii, i);
                StringBuffer buf = new StringBuffer();
                int idx = 1;
                while (idx <= day) {
                    int len = 0;
                    if (idx == 1) {
                        Calendar c = Calendar.getInstance();
                        c.set(ii, i, idx);
                        int xingqi = c.get(Calendar.DAY_OF_WEEK);
                        len = getLen(xingqi);
                        buf.append(addBlank(len));
                    }
                    buf.append(idx++);
                    for (int k = len + 1; k < 7; k++) {
                        if (idx > day) {
                            break;
                        }
                        buf.append("\t" + (idx++));
                    }
                    buf.append("\n");
                }
                data.add(buf);
            }
        }
        return data;
    }

    private static StringBuffer addBlank(int len) {
        StringBuffer buf = new StringBuffer();
        for (int index = 0; index < len; index++) {
            buf.append("\t");
        }
        return buf;
    }

    private static int getLen(int xingqi) {
        return xingqi == Calendar.SUNDAY ? 0 : xingqi - 1;
    }

    public static int days(int year, int month) {

        if (month != 1) {
            return DAYS[month];
        }

        if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
            return 29;
        }
        return DAYS[month];
    }
}
分享到:
评论

相关推荐

    js日历,可选择年月日

    4. 日历算法:日历控件的核心是计算和展示日期。这涉及到一些日期相关的算法,如计算指定年月的第一天是星期几,或者检查某个月份有多少天。JavaScript的Date对象提供了获取和设置日期的方法,但可能需要自定义函数...

    2023年日历电子版兔年大吉

    2. 算法设计:日历算法可以用于计算日期、节假日、农历日期等,需要设计高效的算法来实现这些计算。 3. 日期和时间处理:日期和时间是IT系统中常用的基本数据类型,需要正确地处理日期和时间格式、时区、_dst等问题...

    java源码:日历同步统计 GCALDaemon.zip

    【标题】"java源码:日历同步统计 GCALDaemon.zip"所涉及的知识点主要集中在Java编程语言,源代码分析,以及日历同步算法。GCALDaemon是一个开源项目,用于在本地日历(如Google Calendar)与不同设备之间进行同步。...

    Java项目:日历万年历(java+swing)

    【Java项目:日历万年历(Java+Swing)】是基于Java编程语言和Swing GUI库开发的一款实用工具,旨在提供一个...它为学习者提供了练习和理解Java核心特性和Swing库的实战平台,同时也能锻炼到问题解决和算法设计的能力。

    java课程设计:日历记事本。

    ##### 1.2 算法设计 在设计过程中,采用面向对象的方法论,确保每个类都有明确的职责,并通过继承、封装和多态性等特性实现代码的复用性和扩展性。 - **设计思路**: - 日历组件能够实现前后翻页,并支持年月切换...

    C语言日历算法实例源码(luocheng imti)

    本实例聚焦于C语言实现的日历算法,旨在帮助开发者理解和掌握如何处理日期和时间的计算。"luocheng imti"可能是作者或项目的别名,提供的源码为学习和研究提供了实际操作的例子。 日历算法是一种计算日期和时间的...

    C语言日历算法及对文件操作(把日历打印到TXT)

    在C语言中,实现日历算法以及将日历打印到TXT文件中,涉及到的主要知识点包括:日期和时间处理、文件I/O操作、循环控制、条件判断以及基础的C语言编程语法。下面我们将逐一深入探讨这些内容。 首先,日历算法是基于...

    基于Java的GUI界面的日历记事本

    5. **日历算法**:为了正确地显示和操作日期,程序可能使用了Java的java.time包,该包提供了强类型和本地化的日期和时间API,如LocalDate用于表示无时区的日期,MonthDay用于表示一个月中的某一天。 6. **用户界面...

    万年历程序,能够输出每一年的日历

    万年历程序是一种能够输出每一年的日历的软件系统,该系统能够根据用户输入的年份,生成对应的日历信息。本系统的设计与实现涉及到软件工程、数据结构、算法设计等多个方面的知识。 一、软件需求分析 在设计万年...

    简单的 日历算法

    简单的 日历算法简单的 日历算法简单的 日历算法

    很强大的日历

    1. **日历算法**:为了正确显示日期和处理日期计算,日历系统通常会包含一些日期和时间的处理逻辑,如闰年判断、月份天数计算等。 2. **前端框架**:日历的前端部分可能使用了像React、Vue或Angular这样的现代前端...

    日历算法(c语言)

    详细的有关日历的算法,用c语言编写的111111

    libcalendars:日历算术算法的集合

    日历实现库 一个精确的C库,可为最常见的日历系统提供运算。 当前提供公历,朱利安,米兰科维奇,太阳回历(也称为Shamsi或Jalali),伊斯兰民用和犹太(也称为希伯来语)日历系统。...用法libcalendar中的几乎所有算法

    教学日历自动生成软件

    2. 自动生成日历:根据输入的信息,软件会自动整理成教学日历的格式,方便查看。 3. 文档导出:生成的日历将以TXT文档形式保存,用户可以在任何设备上打开查看,无需特定应用程序。 二、软件使用流程 1. 安装与...

    小程序DEMO:电影日历

    综上所述,"电影日历"小程序DEMO涵盖了多方面的技术知识,包括UI/UX设计、API接口调用、日历功能集成、搜索与筛选算法、本地存储与云服务应用,以及性能优化等。这些技术和知识的运用,共同构建了一个实用且有趣的...

    实现日历的算法逻辑

    日历的实现和有关逻辑算法的介绍

    小程序日历组件,可显示农历!休假补班!自定义提醒

    1. 农历算法:为了在日历中显示农历,我们需要理解农历的计算方法。农历与公历之间存在一定的转换规则,可以通过农历转换库(如JavaScript的`lunar-js`或`china-calendar`)进行计算。 2. 节气处理:农历不仅有月份...

    日历源码啊

    这些功能需要准确的算法来实现。 7. **节假日和特殊日期**:集成公共节假日或用户自定义特殊日期的功能也是常见的需求,这需要维护一个节假日数据库,并在显示日历时突出显示。 8. **提醒与通知**:为确保用户不会...

Global site tag (gtag.js) - Google Analytics