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封装 ...
随机推荐
- Hihocoder 小Hi小Ho扫雷作死一二三
这里贴下不用枚举方格是否为雷的方法 a表示输入标号,初始值为-1代表未探知 b表示当前格子是否有雷,初始化为0,0表示未探知,1表示探知肯定有雷,2表示探知肯定无雷(我也不知道为什么不初始化为-1,作 ...
- Sender(agumaster_crawler)->RabbitMq->Reciever(agumaster)
发送方: package com.heyang.agumasterCrawler; import java.util.List; import org.springframework.beans.fa ...
- agumaster 分页方案
本文例程下载:https://files.cnblogs.com/files/xiandedanteng/agumaster20200430-1.zip 之前的分页方案有点小瑕疵,这回修正了一下. 控 ...
- oracle数据处理之sql*loader(一)
SQL*Loader是oracle提供的可以从多种平面文件中向数据库中加载数据的工具,它比较适合业务分析类型数据库(数据仓库);使用sqlldr工具可以在很短的时间内向数据库中加载大量的数据,像把制作 ...
- 大写的服,看完这篇你还不懂RocketMQ算我输
目录 RocketMQ介绍 RocketMQ概念 为什么要用RocketMQ? 异步解耦 削峰填谷 分布式事务最终一致性 数据分发 RocketMQ架构 RocketMQ消息类型 普通消息 顺序消息 ...
- Sql Server中使用特定字符分割字符串
在T-SQL中我们经常批量操作时都会对字符串进行拆分,可是SQL Server中却没有自带Split函数,所以要自己来实现了.这里将字符串分割以table形式输出 语法如下: SET ANSI_NUL ...
- CTF-BugKu-杂项-29-33
2020.09.15 今天换个新壁纸,换个新背景音乐,燃起来 做题 第二十九题 论剑 https://ctf.bugku.com/challenges#论剑 图片详情没啥信息,不是正方形,考虑改成正方 ...
- [LeetCode]494. 目标和、416. 分割等和子集(0-1背包,DP)
题目一 494. 目标和 给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S.现在你有两个符号 + 和 -.对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前 ...
- 关于px、pt、em、rem四个单位的解释
写在前面 最近在群里突然看到一个问题,就是px pt em rem 三者的区别,这个问题看起来非常基础,也非常容易被忽略,however,面试会问到~,那我就解释一下 px px的英文是pixel,翻 ...
- Magento中数据拷贝一实现
Mage_Sales_Model_Quote::setCustomer方法,有这么一行代码 Mage::helper('core')->copyFieldset('customer_accoun ...