在java.util包中提供了Date和Calendar两个类用来封装日期和时间有关的信息

1.Date类

在java中日期用代表毫微秒的一个厂整数镜像存储表示,也就是日期时间相对格林威治时间(GMT)1970年1月1日零点整数过去的毫微秒数。

1.1 日期的构造方法如下:

1
2
Date date=new Date();   //创建一个当前日期
Date date=new DateDate(long millisec)(); //根据距离格林威时间的毫微秒数构造

1.2常用方法

1
2
3
4
5
6
boolean after(Date date); //如果调用Date对象包含或晚于指定的日期则返回true,否则,返回false。
boolean before(Date date);//如果调用Date对象包含或早于日期指定的日期返回true,否则,返回false。
int compareTo(Date date);//调用对象的值与日期比较。如果这两个值相等返回0。如果调用对象是早于日期返回一个负值。如果调用对象迟于日期返回正值。
long getTime( );//返回自1970年1月1日起已经过的毫秒数。
void setTime(long time);//设置所指定的时间,这表示从1970年1月1日从午夜的时间和日期以毫秒为单位经过的时间。
String toString();//调用Date对象转换为字符串,并返回结果。

1.3时间日期格式化

字符 描述 例子
时代指示器 AD
y 四位数年份 2001
M 年中的月份 July or 07
d 月份中日期 10
h 时间 A.M./P.M.(1~12) 12
H 天中的小时 (0~23) 22
m 小时中的分钟 30
s 分钟中的秒钟 55
S 毫秒 234
E 星期中的天 Tuesday
M 年中的天 July or 07
D 年中的月份 360
a A.M./P.M. 标记 A.M./P.M. 标记
w 年中的星期 40
W 月中的星期 1
k 天中的小时(1~24) 24
K 小时A.M./P.M. (0~11) 10
z 时区 东部标准时间
脱离文本 分隔符
单引号 `

1.4字符串转换日期

SimpleDateFormat类有一些额外的方法,如parse(),它试图根据存储在给定SimpleDateFormat的对象的格式来转换字符串。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static void main(String[] args) {

SimpleDateFormat format = new SimpleDateFormat("yy-MM-dd HH:mm:ss");

String str = "2020-05-6 23:45:48";

Date date;
try {

date = format.parse(str);
System.out.println(date); //Wed May 06 23:45:48 CST 2020
} catch (ParseException e) {
System.out.println("cannot parsable using " + format);
}
}

1.5 日期转字符串

1
2
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd"); //yyyy 四位数年份 2019  yy两位数年份 19
String dateString=format.format(date);

2.Calendar类

2.1获取当前日期

  • Calendar类主要用于日期与年,月,日等整数值的转换,Calendar是一个抽象类,不能直接创建对象。但是可以使用静态方法getInstance()获得代表当前日期的日历对象

2.1设置指定日期

  • 通过该对象可以调用如下方法将日历翻到指定的一个时间:
    1
    2
    Calendar c = Calendar.getInstance();
    c.set(2020,5,6);

    2.3从日历中获取有关信息

  • 要从日历中获取有关年份、月份、星期、小时等的信息,可以通过**int get(int filed)**方法得到。其中参数field的值由Calender类的静态常量决定:YEAR代表年,MONTH代表月份,DAY_OF_WEEK代表星期几,HOUR代表小时,MINUTE代表分钟,SECOND代表秒。例如:
    1
    2
    3
    Calendar c = Calendar.getInstance();
    String str = c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + c.get(Calendar.DATE);
    System.out.println(str);

    如果get(Calendar.MONTH)返回值为0代表当前日历为一月份,如果返回1代表二月份,以此类推。

2.4Date与Calendar互相转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//Calendar转Date
Calendar cal1 = Calendar.getInstance();
Date date1 = cal1.getTime();
System.out.println(cal1);
System.out.println("-------------------------------");
System.out.println(date1);
System.out.println("-------------------------------");

//Date转Calendar
Date date2 = new Date();
Calendar cal2 = Calendar.getInstance();
cal2.setTime(date2);
System.out.println(cal2);
System.out.println("-------------------------------");
System.out.println(date2);
System.out.println(date2);

/*
java.util.GregorianCalendar[time=1588781792372,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=29,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2020,MONTH=4,WEEK_OF_YEAR=19,WEEK_OF_MONTH=2,DAY_OF_MONTH=7,DAY_OF_YEAR=128,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=16,SECOND=32,MILLISECOND=372,ZONE_OFFSET=28800000,DST_OFFSET=0]
-------------------------------
Thu May 07 00:16:32 CST 2020
-------------------------------
java.util.GregorianCalendar[time=1588781792385,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=29,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2020,MONTH=4,WEEK_OF_YEAR=19,WEEK_OF_MONTH=2,DAY_OF_MONTH=7,DAY_OF_YEAR=128,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=16,SECOND=32,MILLISECOND=385,ZONE_OFFSET=28800000,DST_OFFSET=0]
-------------------------------
Thu May 07 00:16:32 CST 2020
*/

参考:https://www.cnblogs.com/coder-wzr/p/8416659.html