[19/03/17-星期日] 常用类_Calendar日历类&GregorianCalendar公历日历类

博客介绍了Java中Calendar类和GregorianCalendar类。Calendar是抽象类,提供日期计算功能,如年、月、日等的展示和计算。GregorianCalendar是其具体子类,提供标准日历系统。还提示了月份表示方式,最后给出日历小程序代码示例链接。

一、概念

      Calendar 类是一个抽象类,为我们提供了关于日期计算的相关功能,比如:年、月、日、时、分、秒的展示和计算。

      GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统。

 【提示】月份的表示,一月是0,二月是1,以此类推,12月是11。 因为大多数人习惯于使用单词而不是使用数字来表示月份,这样程序也许更易读,父类Calendar使用常量来表

示月份:JANUARY、FEBRUARY等。

【代码示例】

 1 /*
 2 *测试日历 Calendar类(抽象类)及GregorianCalendar公历类 (具体实现类) 
 3  */
 4 package cn.sxt.test;
 5 
 6 import java.util.*;
 7 
 8 public class Test_0317_CalenderClass {
 9     public static void main(String[] args) {
10         
11         /*//获取年月日等相关信息
12         Calendar calendar=new GregorianCalendar(2019,03,20,10,00,10);//注意! 这里的3其实表示的是4月(数字+1=实际月份)
13         System.out.println(calendar.get(Calendar.YEAR));//获得年份
14         System.out.println(calendar.get(Calendar.MONTH));//获得月份 0-11表示1-12月
15         System.out.println(calendar.get(Calendar.DATE));//获得月份 0-11表示1-12月
16         System.out.println(calendar.get(Calendar.DAY_OF_WEEK));//获得星期几 1-7  分别表示星期日-星期六  19年4月20为星期六,结果输出7 正确
17         
18         //设置年月日等相关信息
19         Calendar calendar2=new GregorianCalendar();
20         calendar2.set(2049, 10, 1);
21         System.out.println(calendar2);
22         calendar2.add(Calendar.YEAR, 10);//在calendar2日期的基础上加10年; 年月日同理都可以这样设置
23         calendar2.add(Calendar.YEAR, -10);//在calendar2日期的基础上减去10年
24         
25         //日期对象和时间对象相互转化 
26         Date d1=calendar.getTime();
27         Calendar calendar3=new GregorianCalendar();
28         calendar3.setTime(new Date());
29         */
30         Calendar calendar=new GregorianCalendar(2019,03,21,10,00,10); //实际上日期判断是4月21是星期几
31         //Calendar calendar2=calendar.getInstance();//获取系统当前时间 但是月份需要加1才为正确结果
32         printCalendar(calendar);
33         
34     }
35     
36     public static void printCalendar(Calendar c){
37         int year=c.get(Calendar.YEAR);
38         int month=c.get(Calendar.MONTH)+1;//为了表达真实想法,月份后边+1
39         int date=c.get(Calendar.DATE);
40         int dayweek=c.get(Calendar.DAY_OF_WEEK)-1;//电脑中 1-7 是周日到周六 所以可以做个处理 减1符合习惯
41         String dayString= (dayweek==0?"日":dayweek+""); //a?b:c 含义如果 a的值判定为 true,则表达式返回 b的值,否则返回 c的值。
42         
43         int hour=c.get(Calendar.HOUR);//时分秒
44         int minute=c.get(Calendar.MINUTE);
45         int second=c.get(Calendar.SECOND);
46         System.out.printf("%d年%d月%d日,星期%s %d:%d:%d\n", year, month, date, dayString, hour, minute, second);
47         
48     }
49 
50 }

【日历小程序】

 1 /*
 2 *日历小程序
 3  */
 4 package cn.sxt.test;
 5 import java.text.DateFormat;
 6 import java.text.ParseException;
 7 import java.text.SimpleDateFormat;
 8 import java.util.*;
 9 public class Test_0317_Calender {
10     public static void main(String[] args) throws ParseException {    
11         //String str="2019-3-17"; 实现键盘交互
12         System.out.println("请输入日期(格式为:2019-3-21):");
13         Scanner scanner=new Scanner(System.in);
14         String str=scanner.nextLine();
15         
16         DateFormat df=new SimpleDateFormat("yyyy-MM-dd");//"把【时间对象】按照格式字符串输出 " 格式化输出日期
17                                  //给定一个字符串,转成一个日期类  parse: (英语意思)从语法上描述或分析
18         Date date=df.parse(str); //parse: 按指定的源格式把String转换为Date类的对象date(格式为:Thu Nov 01 18:27:06 CST 2018)
19         //Calendar calendar=new GregorianCalendar(2019,03,21,10,00,10);这句话中的实际日期是2019年4月21日 注意区别
20         //以下2句,则是把我们实际真实想要表达的时间如19年3月21日给设置进去,且可以输出正确结果
21         Calendar calendar=new GregorianCalendar(); 
22         calendar.setTime(date);
23         
24         int day=calendar.get(Calendar.DAY_OF_MONTH);//把对象calendar中的日期取出来
25         //getActualMaximum函数,主要是用于获取一个指定日期的当月总天数  get(Calendar.DATE);获取给定日期中的具体天数如给定的17号
26         //如果把这步省去,直接让第二个for循环i<=calendar.getActualMaximum(Calendar.DATE),则会多打印下个月的前几天,注意!
27         int days=calendar.getActualMaximum(Calendar.DATE);
28         
29         System.out.println("日\t一\t二\t三\t四\t五\t六\t");
30         
31         calendar.set(calendar.DAY_OF_MONTH, 1);//把对象calendar先置为1号 
32         
33         /*星期日对应数字1,星期六对应数字7,假如给定的日期所在月份的1号是星期四(对应数字5),则理应在前边先输出4个制表符(代表星期日、
34         星期一、星期二、星期三),然后再输出1号所在的星期即星期四才符合常理  */
35         for(int i=1;i<=calendar.get(Calendar.DAY_OF_WEEK)-1;i++){
36             System.out.print("\t"); 
37         } 
38         
39         for(int i=1;i<=days;i++){
40             if(day == calendar.get(Calendar.DAY_OF_MONTH)){
41                 System.out.print(calendar.get(Calendar.DAY_OF_MONTH)+"*\t");//给定日期后边多加个*
42             }else {
43                 System.out.print(calendar.get(Calendar.DAY_OF_MONTH)+"\t");
44             }
45             if(calendar.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY){//如果对象calendar执行完, 恰好为周六则换行
46                 System.out.println();
47     
48             }
49             calendar.add(Calendar.DAY_OF_MONTH, 1);//执行完上步后,每次打印完后日期加1。初始日期为1号
50         }
51         
52     }
53 
54 }

 

转载于:https://www.cnblogs.com/ID-qingxin/p/10569042.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值