java万年历的两种实现方式
第一种 硬写(思路:找某一年的一月一日做参考,计算输入的日期到参考日期,间隔的天数,计算输入日期的一号是周几)
// 准备数据System.out.println("**********欢 迎 使 用 万 年 历***********");Scanner scanner = new Scanner(System.in);System.out.println("请输入年份:");int year = scanner.nextInt();if (year < 0) {System.out.println("年份错误!");return;}System.out.println("请输入月份:");int month = scanner.nextInt();if (month > 12 || month < 1) {System.out.println("月份错误!");return;}int day = 30;// 当月的天数int day_num = 0;// 从2001年1月到当前月的天数int yearTest = 2001;// 2001年int weekTest = 1;// 2001年1月1日周一int week = 0;// 当前月1号是周几// 处理数据// 年份大于2001年if (year >= yearTest) {int year_1 = year - yearTest;// 2001年到今年多少年day_num = year_1 * 365 + year_1 / 4 - year_1 / 100 + year_1 / 400;// 判断当前月1号离今年1月1号有多少天for (int i = 1; i <= month; i++) {if ((i % 2 != 0 && i <= 7) || (i % 2 == 0 && i >= 8)) {if (i != month)//不算当前月份day_num += 31;elseday = 31;} else if (i == 2) {if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {if (i != month)day_num += 29;elseday = 29;} else {if (i != month)day_num += 28;elseday = 28;}} else {if (i != month)day_num += 30;elseday = 30;}}week = (day_num + weekTest) % 7;// 当前月1号是周几} else {// 年份小于2001int year_1 = yearTest - year - 1;// 2001年到今年多少年day_num = year_1 * 365 + year_1 / 4 - year_1 / 100 + year_1 / 400;if (year_1 % 4 != 0) {// 闰年年数=year_1/4向上取整(2000年是闰年)day_num++;}// 判断当前月1号离今年1月1号有多少天for (int i = 12; i >= month; i--) {if ((i % 2 != 0 && i <= 7) || (i % 2 == 0 && i >= 8)) {day_num += 31;//当i==month的时候也要加,即算上当前月day = 31;} else if (i == 2) {if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {day_num += 29;day = 29;} else {day_num += 28;day = 28;}} else {day_num += 30;day = 30;}}// 星期从周天往前数week = (weekTest + 7 - (day_num % 7)) % 7;}// 输出数据System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t");for (int i = 0, j = 1; j <= day; i++) {if (i < week) {System.out.print("\t");} else {System.out.print(j++ + "\t");}if (i % 7 == 6) {System.out.println();}}
第二种方法:借助java.Calendar类,思路不变
System.out.println("请输入日期(例如:2021-06-01):");Scanner scan = new Scanner(System.in);Date date = new Date();Calendar cal = Calendar.getInstance();try {// 设置日期字符串格式SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");date = sdf.parse(scan.next());} catch (ParseException e) {System.out.println("输入日期格式有误!");System.out.println("再皮腿给你打折!!!");return;}cal.setTime(date);// 将日期设置成日历int day = cal.get(Calendar.DAY_OF_MONTH);// 取出今天是几号cal.set(Calendar.DAY_OF_MONTH, 1);// 将日期设置为每月的1号,方便计算每月1一号是周几System.out.println("日\t一\t二\t三\t四\t五\t六\t");for (int i = 1, j = 1; i <= cal.getActualMaximum(Calendar.DAY_OF_MONTH); j++) {// i控制输出每月的几号// j控制每周换行以及正式打印号数之前的空格// cal.getActualMaximum(Calendar.DAY_OF_MONTH)当前月有多少天if (j >= cal.get(Calendar.DAY_OF_WEEK)) {// 当前月一号是周几cal.get(Calendar.DAY_OF_WEEK)if (i == day) {// 标记当天System.out.print("*" + i + "\t");} else {System.out.print(i + "\t");}i++;} else {// 打印空格System.out.print("\t");}// 控制每周换行if (j % 7 == 0) {System.out.println();}}
java万年历的两种实现方式相关推荐
- java动态代理两种实现方式
代理顾名思义就是代理别人完成某件任务,比如张三代理李四去交物业费.张三就是代理人,李四就是被代理人. Java代理实现,有静态代理和动态代理,静态代理就是代码在编译成class文件后,就已经有代理类的 ...
- Java线程的两种实现方式
前言 线程是程序的一条执行线索,执行路径,是程序使用cpu的最小单位.线程本身不能运行,它只能运行在程序中,线程是依赖于程序存在的. 多线程的意义 其实任何一个程序的执行都需要获得cpu的执行权,是由 ...
- java中的uuid是啥,UUID在Java中的两种发作方式
需求: 集群环境下需要产生uuid,uuid的作用不言而喻 转发请注明出处:http://snv.iteye.com/ 环境: org.safehaus.jug jug 2.0.0 asl 或: or ...
- java之Map对象转java对象的两种简单方式
我们在处理数据的时候,经常用到map对象转java对象,下面我们用代码演示下,希望能够帮助到有这方面需求的老哥. 要转换的java对象: public class Person {private In ...
- java定时任务的两种实现方式
一.Timer 现在项目中用到需要定时去检查文件是否更新的功能.timer正好用于此处. 用法很简单,new一个timer,然后写一个timertask的子类即可. package comz.auto ...
- 初始化一个java空数组_Java 数组的两种初始化方式
一.数组 1.数组中存储元素的类型是统一的,每一个元素在内存中所占用的空间大小是相同的,知道数组的首元素的内存地址,要查找的元素只要知道下标,就可以快速的计算出偏移量,通过首元素内存地址加上偏移量,就 ...
- Java两种排序方式快慢比较
2019独角兽企业重金招聘Python工程师标准>>> Java中List的排序方式有两种,现在我们测试下这两种排序方式的快慢吧,我们需要用到两个类, 一个是运行程序的Main类,另 ...
- java 同步方式 lock_java的两种同步方式, Synchronized与ReentrantLock的区别
java在编写多线程程序时,为了保证线程安全,需要对数据同步,经常用到两种同步方式就是Synchronized和重入锁ReentrantLock. 相似点: 这两种同步方式有很多相似之处,它们都是加锁 ...
- Java多线程两种实现方式的对比
Java多线程两种实现方式的对比 一种,直接继承Thread类 一种,实现Thread类的Runnable接口 两种方式的区别 比如,售票厅有四个窗口,可以发售某日某次列出的100张车票,此时,100 ...
- Java技术分享:升级所安装Java版本的两种方式
在进行Java开发的时候我们可能会需要升级所安装的Java版本,那么你知道应该如何安装吗?小千今天就来给大家介绍两种方式. 一.卸载掉原本安装的Java,下载最新安装包安装即可. 这个步骤就不介绍了, ...
最新文章
- 通知 | 2021年度“RONG”奖学金入围答辩名单公布
- 清华“法律数据科研平台”向校内师生开放试运行
- luogu_P3313 [SDOI2014]旅行
- OpenCV 高级API:TextDetectionModel和TextRecognitionModel
- AbstractAutoWireCapableBeanFactory 对Bean 实例进行属性依赖注入
- SAP Kyma(Extension Factory on SAP Cloud Platform)的架构简介
- 本地工程提交github
- sql2003安装sql2005企业版
- ZOJ - 3880 Demacia of the Ancients
- 新唐N76E003单片机用APROM模拟EEPROM每次下载写入值复位为0XFF
- 新加坡圣淘沙亲子游自助游景点购票攻略
- 计算机开机速度慢是什么原因,电脑开机慢是什么原因?怎么处理?
- “数字孪生”语境下的城市:拼图模式与航向之争
- Document读取XML
- C#批量剪切视频文件
- 树形结构数据封装(及拉平)的几种方法
- 如何选型PLM软件?PLM选型时注意哪些事项呢?
- linux Runtime
- 四川率先发布新基建新消费新产业创新发展行动计划
- 有道云导入html,有道云笔记网页剪报怎么用 有道云笔记网页剪报使用教程