「JAVA」Date类,Calendar类详解,可视化日历小程序

一、功能:

输入:2017-10-03      

输出:  

示例

二、代码:

 1 import java.text.ParseException;
 2 import java.text.SimpleDateFormat;
 3 import java.util.Calendar;
 4 import java.util.GregorianCalendar;
 5 import java.util.Scanner;
 6 import java.util.Date;
 7 
 8 public class VisualCalender {
 9     public static void main(String[] args)  {
10         System.out.println("请输入日期:");
11 
12         Scanner sc=new Scanner(System.in);
13         String str_1=sc.nextLine();
14         //定义时间转换格式
15         SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
16 
17         Date t = null;
18         try {
19             //将字符串按照格式转化为Date对象
20             t = df.parse(str_1);
21         }catch (ParseException e){
22             System.out.println(e);
23         }
24         //创建calendar对象并将事件设置为date的值
25         GregorianCalendar gCalendar = new GregorianCalendar();
26         gCalendar.setTime(t);
27         //得到目标天的号数
28         int today = gCalendar.get(Calendar.DAY_OF_MONTH);
29         //将目标天的号数设为1
30         gCalendar.set(Calendar.DAY_OF_MONTH,1);
31         //得到目标月份的最大天数
32         int maxday = gCalendar.getActualMaximum(Calendar.DAY_OF_MONTH);
33         //得到目标月第一天是该星期的第几天
34         int day_in_week = gCalendar.get(Calendar.DAY_OF_WEEK);
35         //输出日历前面的空格使日历对齐
36         System.out.println("日\t一\t二\t三\t四\t五\t六");
37         for(int i = 1;i <= day_in_week - 1;i++){
38             System.out.print("\t");
39 
40         }
41         //输出日历
42         for(int i = 1;i <= maxday;i++){
43             gCalendar.set(Calendar.DAY_OF_MONTH,i);
44             System.out.print(i + "\t");
45             //如果这天是星期六就换行
46             if(gCalendar.get(Calendar.DAY_OF_WEEK) == 7){
47                 System.out.println();
48             }
49             //将"今天"在输出的日历中做标记
50             if(i + 1 == today){
51                 System.out.print("*");
52             }
53         }
54     }
55 }
View Code

三、Date类:

JAVA中时间是以1970年1月1号0点为原点,向现在以及未来无限延伸的的数轴。数轴的最小单位为毫秒,例如1970年一月一号凌晨一点:60*60*1000.

Date类位于java.util包中

 1 import java.util.Date;
 2 
 3 public class testDate {
 4     public static void main(String[] args) {
 5         //无参构造默认当前时间
 6         Date t = new Date();
 7         //传入一个整数则转化为毫秒从标准纪元计算时间
 8         Date t1 = new Date(2000);
 9         //System.currentTimeMillis()方法表示取得系统当前时间,返回值为long型毫秒值
10         long nowtime = System.currentTimeMillis();
11         System.out.println(t);
12         System.out.println(t1);
13         System.out.println(nowtime);
14     }
15 }
16 
17 
18 //输出: Thu Oct 19 21:29:48 CST 2017
19             Thu Jan 01 08:00:02 CST 1970
20             1508419788544

Date对象通过getTime()方法返回他对应的long类型的值。最开始Date类功能很强大,后来在某一版本中将其与年月日有关的一部分功能分出并启用Calendar类。剩余的一般方法还有getTime(),设置时间setTime(Long l),判断两个Date对象是否相等equals(),Date对象时间上先后比较before(),after(),toString(),hashCode(),等等

四、Dateformat和SimpleDateformat,字符串与Date对象之间的转换

Dateformat是抽象类,不能实例化,常用为他的子类SimpleDateformat。位于java.text包中

 1 import java.text.DateFormat;
 2 import java.text.ParseException;
 3 import java.text.SimpleDateFormat;
 4 import java.util.Date;
 5 
 6 public class testDate {
 7     public static void main(String[] args) throws ParseException {
 8         //定义时间转换格式
 9         DateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日");
10         Date date = new Date(233333333l);
11         String string = "2017年01月21日";
12         //parse(String)将标准字符串按定义的格式转换为Date对象,需要抛出异常
13         Date date1 = dateFormat.parse(string);
14         //format(Date)将Date对象按定义的格式转换为标准字符串
15         String string1 = dateFormat.format(date);
16         System.out.println(date1);//输出:Sat Jan 21 00:00:00 CST 2017
17         System.out.println(string1);//输出:1970年01月04日
18     }
19 }

时间转换格式参数:

 

区分大小写,年月日中间的间隔符可以自定义,常用格式为:2017-10-10或者是2017年10月10日

五、Calendar类:

Calendar类同Date类位于java.util包中,其详细定义了操作年,月,日的方法,主要操作方式为set方法和get方法,简单易懂。下面是可视化日历小程序中对Calendar类进行操作的部分,其他设置类同:

 1    GregorianCalendar gCalendar = new GregorianCalendar();
 2         gCalendar.setTime(t);
 3         //得到目标天的号数
 4         int today = gCalendar.get(Calendar.DAY_OF_MONTH);
 5         //将目标天的号数设为1
 6         gCalendar.set(Calendar.DAY_OF_MONTH,1);
 7         //得到目标月份的最大天数
 8         int maxday = gCalendar.getActualMaximum(Calendar.DAY_OF_MONTH);
 9         //得到目标月第一天是该星期的第几天
10         int day_in_week = gCalendar.get(Calendar.DAY_OF_WEEK);

 

 

posted @ 2017-10-19 22:23  海耶  阅读(383)  评论(0编辑  收藏  举报