java自定义日历
hellolxb 人气:0效果图:
源码:
package com.example; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Locale; import java.util.Scanner; public class Test12 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scanner = new Scanner(System.in); System.out.println("请输入年份!查询范围是 1900-2900"); int year = scanner.nextInt(); System.out.println("请输入月份!查询范围是 1-12"); int month = scanner.nextInt(); System.out.println("请输入日期!查询范围是1-" + getMonth(month, year)); int day = scanner.nextInt(); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, year); calendar.set(Calendar.MONTH, month - 1); calendar.set(Calendar.DAY_OF_MONTH, day); System.out.println(year + "年" + (isRunYear(year) ? "是闰年" : "不是闰年")); System.out.println("本月有" + getMonth(month, year) + "天"); int totalDays = 0; for (int i = 1900; i < year; i++) { totalDays += isRunYear(i) ? 366 : 365; } int nowDays = calendar.get(Calendar.DAY_OF_YEAR); totalDays += nowDays; System.out.println(year + "-" + month + "-" + day + "距1900年1月1日已有" + totalDays + "天"); System.out.println(year + "-" + month + "-" + day + "距本年1月1日已有" + nowDays + "天"); calendar.set(Calendar.DAY_OF_MONTH, 1); System.out.println("本月的第一天为" + getFormatTime("EEEE", calendar.getTime())); System.out.println("本月日历为:"); // 这里只是简单的输出字符串,假如在 Android Studio 的类似的开发平台中自定义日历的话,可以将泛型 String 换 // 成相应的 JavaBean 对象来存储数据和做标记,如标记是当月,是否被选中等。 List<String> list = new ArrayList<>(); // 得到本月一号的星期索引 // 索引从 1 开始,第一个为星期日,减 1 是为了与星期对齐,如星期一对应索引1,星期二对应索引二 int weekIndex = calendar.get(Calendar.DAY_OF_WEEK) - 1; // 拿到上一个月的最后几天的天数 for (int i = 0; i < weekIndex; i++) { list.add(""); } int currentDays = getMonth(month, year); // 拿到当月的天数 for (int i = 0; i < currentDays; i++) { int days = i + 1; if (days == day) { list.add("@" + days); } else { list.add(days + ""); } } // 拿到下个月第一周的天数 // 先拿到本月最后一天的星期索引 calendar.set(Calendar.DAY_OF_MONTH, currentDays); weekIndex = calendar.get(Calendar.DAY_OF_WEEK) - 1; for (int i = 0; i < 6 - weekIndex; i++) { list.add(""); } String[] weeks = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; for (int i = 0; i < weeks.length; i++) { System.out.print(getFormatString(weeks[i])); } System.out.println(); int i = 0; for (String s : list) { System.out.print(getFormatString(s)); if ((i + 1) % 7 == 0) { System.out.println(); } i++; } System.out.println("谢谢使用!"); } public static String getFormatString(String s) { // return String.format("%8s", s); return s + "\t"; } // 判断是否为闰年 public static boolean isRunYear(int y) { return y % 4 == 0 && y % 100 != 0 || y % 400 == 0; } public static String getFormatTime(String p, Date t) { return new SimpleDateFormat(p, Locale.CHINESE).format(t); } // 获取当月的天数 public static int getMonth(int m, int y) { switch (m) { case 2: return isRunYear(y) ? 29 : 28; case 4: case 6: case 9: case 11: return 30; default: return 31; } } }
加载全部内容