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封装 ...
随机推荐
- wxWidgets教程
https://www.wxwidgets.org/docs/tutorials/ http://zetcode.com/gui/wxwidgets/ https://docs.wxwidgets.o ...
- JS 进制转换的理解
该事情的由来是来自于一个面试题,题目是这样的,[1,2,3].map(parseInt)的结果是什么? 作为菜鸟的我们一定是觉得分别把1,2,3分别交给parseInt,无非就是1,2,3嘛.其实结果 ...
- python简介以及简单代码——python学习笔记(一)
学习来源:https://www.liaoxuefeng.com/wiki/1016959663602400 了解python 简单编写并实现python代码 命令行模式和python交互模式 了解p ...
- 求学生单科流水表中单科最近/最新的考试成绩表的新增可行性方案 使用Oracle提供的分析函数rank
在 https://www.cnblogs.com/xiandedanteng/p/12327809.html 一文中,提到了三种求学生单科最新成绩的SQL可行性方案,这里还有另一种实现,那就是利用分 ...
- Mybatis-日志
日志 目录 日志 1. 日志工厂 1. STDOUT_LOGGING标准日志输出 2. LOG4J 1. 先导入Log4J的包 2. log4j.properties 3. 配置log4j为日志的实现 ...
- Proxy使用详解
文档:Proxy 基本使用就不赘述,看文档即可 通用 1.Proxy可以包装任何形式的对象:包括原生数组,函数,甚至另一个代理 2.代理实例中没有指定的handler,实际就是操作原对象target: ...
- Fiddler无法抓取web项目中的http请求解决方案
问题:webform项目中对接API使用Fiddler无法获取该API的请求,该webform比较老的一个项目, 同一个API写在控制台可以抓取到请求,用web项目放在本地IIS却不行,使用IIS E ...
- Redis Cluster集群架构实现
Redis集群简介 通过前面三篇博客的介绍<Redis基础认识及常用命令使用(一)–技术流ken>,<Redis基础知识补充及持久化.备份介绍(二)–技术流ken>,<R ...
- JVM-概述和内存区域
目录 JVM的优势 Java的跨平台性 JVM跨语言 举个例子 JVM整体结构 运行时数据区 方法区(Method Area) 1. 什么是方法区(Method Area)? 2.方法区(Method ...
- O、Θ、Ω
1.这些是时间复杂度的.(e.g. O(n).Θ(n).Ω(n)) 主要为主定理(坏东西) 2.本质 O <= Θ = Ω >=