Java中 util 包 Calendar类制作万年历(不用自己写方法,直接用Java写好的包中的类的方法)
代码前需要了解的关于Calendar类的内容:

1、在util包中,首先要知道Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象。Calendar 的 getInstance 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化:
Calendar rightNow = Calendar.getInstance();
得到的结果为:
java.util.GregorianCalendar[time=1602247844439,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2020,MONTH=9,WEEK_OF_YEAR=41,WEEK_OF_MONTH=2,DAY_OF_MONTH=9,DAY_OF_YEAR=283,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=8,HOUR_OF_DAY=20,MINUTE=50,SECOND=44,MILLISECOND=439,ZONE_OFFSET=28800000,DST_OFFSET=0]

very very长的结果,里面的主要内容是啥呢,英语好的朋友根据每个单词的英文应该都能够理解了,而我的准确时间应该是:2020-10-09 星期五 20:50:44,而在粉红色记号中会发现,上面写的是9月9日 星期四。
为啥是这样呢?因为在Java中,Month 值是基于 0 的,例如:0 表示 January(1月);而一周呢是从周日开始的,所以1表示Friday。
因此当运行 Calendar rightNow = Calendar.getInstance(); 输出时,得到的月份和星期数是有差异的。
那我们如何将它换成我们自己常用的格式呢,使用
System.out.println(calendar.get( Calendar.YEAR)+"年 "
+ ( calendar.get( Calendar.MONTH) +1 ) +"月"
+ calendar.get( Calendar.DAY_OF_MONTH ) +"日 "
+ calendar.get( Calendar.HOUR_OF_DAY ) +'':''+calendar.get(Calendar.MINUTE) +": "+calendar.get(Calendar.SECOND)
+ " 星期 "+( calendar.get( Calendar.DAY_OF_WEEK ) -1 ) );
就可以得到:
2020年 10月9日 21: 23: 13 星期 5
2、Calendar 类是一个抽象类,这就意味着我们使它时不能实例化它,意思就是不能直接new 它,只能对它的子类进行实例化,我们已知它的子类为:GregorianCalendar
正式开始程序:
1 package com.zrx.case02;
2
3 import java.util.Calendar;
4 import java.util.Scanner;
5
6 public class Test02 {
7
8 public static void main(String[] args) {
9 Calendar calendar = Calendar.getInstance();
10 // System.out.println(calendar);
11 System.out.println(calendar.get(Calendar.YEAR)+"年 "
12 + ( calendar.get(Calendar.MONTH) +1 ) +"月"
13 + calendar.get(Calendar.DAY_OF_MONTH) +"日 "
14 + calendar.get(Calendar.HOUR_OF_DAY) +": "+calendar.get(Calendar.MINUTE) +": "+calendar.get(Calendar.SECOND)
15 + " 星期"+( calendar.get(Calendar.DAY_OF_WEEK) -1 ));
16
17 //修改年份
18 calendar.set(Calendar.YEAR, 2017);
19 System.out.println(calendar.get(Calendar.YEAR)+"年 "
20 + ( calendar.get(Calendar.MONTH) +1 ) +"月"
21 + calendar.get(Calendar.DAY_OF_MONTH) +"日 "
22 + calendar.get(Calendar.HOUR_OF_DAY) +": "+calendar.get(Calendar.MINUTE) +": "+calendar.get(Calendar.SECOND)
23 + " 星期"+( calendar.get(Calendar.DAY_OF_WEEK) -1 ));
24
25 //根据日历规律
26 calendar.add(Calendar.YEAR, 3);
27 System.out.println(calendar.get(Calendar.YEAR)+"年 "
28 + ( calendar.get(Calendar.MONTH) +1 ) +"月"
29 + calendar.get(Calendar.DAY_OF_MONTH) +"日 "
30 + calendar.get(Calendar.HOUR_OF_DAY) +": "+calendar.get(Calendar.MINUTE) +": "+calendar.get(Calendar.SECOND)
31 + " 星期"+( calendar.get(Calendar.DAY_OF_WEEK) -1 ));
32
33 System.out.println("--------------------------------------------------------------------------");
34
35
36 //完成万年历
37 Scanner sc = new Scanner(System.in);
38 int year = 0;
39 int month = 0;
40 do {
41 System.out.println("请输入年份:");
42 year = sc.nextInt();
43 }while(year<1970);
44 do {
45 System.out.println("请输入月份:");
46 month = sc.nextInt();
47 }while(month<1 || month>12);
48
49 Calendar c = Calendar.getInstance();
50 c.set(Calendar.YEAR, year);
51
52 c.set(Calendar.MONTH, month); //此时month要多一个月,因为从0开始
53 c.set(Calendar.DAY_OF_MONTH, 1); //则为下个月的一号
54
55 c.add(Calendar.DAY_OF_MONTH, -1); //减一天后变为当月的最后一天
56 int days = c.get(Calendar.DAY_OF_MONTH); //获取当月的天数
57
58 //设置当前月份的一号
59 c.set(Calendar.DAY_OF_MONTH,1);
60 //获取1号是星期几
61 int weekDay = c.get(Calendar.DAY_OF_WEEK);
62 //按格式输出日历
63 System.out.println("周天\t周一\t周二\t周三\t周四\t周五\t周六\t");
64 for(int i = 2; i<=weekDay;i++) {
65 System.out.print("\t");
66 }
67 for(int i = 1; i<=days ;i++) {
68 System.out.print(i+"\t");
69 if( (( i+weekDay) -1)%7 == 0 ) {
70 System.out.println();
71 }
72 }
73 }
74 }
---在学习使用Java中各位大佬已经写好的类包的遇见啥不会使用的时候,要会灵活运用JDK API帮助文档,可以学到很多简便快捷的方法
----本次学习文字内容是根据JDK 1.6.0 API帮助文档中文版摘抄总结的。
Java中 util 包 Calendar类制作万年历(不用自己写方法,直接用Java写好的包中的类的方法)的更多相关文章
- Vue3中defineEmits、defineProps 是怎么做到不用引入就能直接用的
最近正在将一个使用单文件组件的 Options API 的 Vue2 JavaScript 项目升级为 Vue3 typescript,并利用 Composition API 的优势. 比如,下面这种 ...
- 用CLion实现本地方法并给java调用
众所周知,PHP是世界上最好的语言,java排第二,因为PHP无所不能.但是在某些场景下java还要调用本地方法来提高执行的效率,故java只能排第二.java提供了jni(Java Native I ...
- HttpTool.java(在java tool util工具类中已存在) 暂保留
HttpTool.java 该类为java源生态的http 请求工具,不依赖第三方jar包 ,即插即用. package kingtool; import java.io.BufferedReader ...
- PAT——不吉利的日期(java中date和Calendar使用)
题目描述 在国外,每月的 13 号和每周的星期 5 都是不吉利的.特别是当 13 号那天恰好是星期 5时,更不吉利. 现在给你一个年份,请你从小到大依次输出当年所有13 号是星期 5 的月份. 输入描 ...
- Java学习笔记(七)——获取类中方法的信息,java的LinkedList
[前面的话] 在实际项目中学习知识总是最快和最有效的,既能够较好的掌握知识,又能够做出点东西,还是简单的知识总结,最近一直在总结笔记,写的东西还是比较水,希望慢慢可以写出一些干货. 学习过程中的小知识 ...
- JAVA基础——Date和Calendar类
1计算某一月份的最大天数 Calendar time=Calendar.getInstance(); time.clear(); time.set(Calendar.YEAR,year); //yea ...
- Java:面向对象(继承,方法的重写(overide),super,object类及object类中方法的重写,父子类代码块执行顺序)
继承: 1.继承是对某一匹类的抽象,从而实现对现实世界更好的建模. 2.提高代码的复用性. 3.extends(扩展),子类是父类的扩展. 4.子类继承父类可以得到父类的全部属性和方法.(除了父类的构 ...
- 090 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 04 使用包进行类管理(2)——导入包
090 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 089 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 使用包进行类管理(1)——创建包
089 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
随机推荐
- MySQL 增删查改 必知必会
MySQL 数据库中的基础操作 3.表的修改 对表的表名.字段.字段类型.字段长度.约束等进行修改. 3.1 表的名称修改 -- 语法: ALTER TABLE 库名.表名 RENAME TO 新表名 ...
- Spring Cloud:Consul基础知识
一.基本概念 Consul是一套开源的分布式服务发现和配置管理系统,由HashiCorp公司用Go开发. 它提供微服务系统中的服务治理.配置中心.控制总线等功能. 服务发现:提供HTTP和DNS两种发 ...
- js转换人民币金额 小写到大写
u.bigNum=function(n) { var fraction = ['角', '分']; var digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒 ...
- 剑指 Offer 45. 把数组排成最小的数
题目描述 输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个. 示例 1: 输入: [10,2] 输出: "102" 示例 2: 输入: ...
- [业界方案] 用SOFATracer学习分布式追踪系统Opentracing
[业界方案] 用SOFATracer学习分布式追踪系统Opentracing 目录 [业界方案] 用SOFATracer学习分布式追踪系统Opentracing 0x00 摘要 0x01 缘由 &am ...
- Brup sute
暴力破解
- python appium app ui 自动化
1.下载Android-SDK.夜神安卓模拟器.Appium.adb命令执行包并配置环境变量 2.打开夜神 3.打开Appium进行配置,配置如下 4.启动命令,到夜神bin目录下执行 adb con ...
- 突然虚拟机无法联网解决办法,且报错Failed to start LSB: Bring up/down
使用sudo service network restart去启动网络时起不来 使用systemctl status network.service查看网络状态也是failed,且报错Failed t ...
- 一条 SQL 引发的事故,同事直接被开除!!
前言 Insert into select请慎用. 这天xxx接到一个需求,需要将表A的数据迁移到表B中去做一个备份.本想通过程序先查询查出来然后批量插入.但xxx觉得这样有点慢,需要耗费大量的网络I ...
- 集群数据ID生成之美团叶子生成
转自https://tech.meituan.com/2017/04/21/mt-leaf.html 在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识.如在美团点评的金融.支付.餐饮.酒店. ...