1. Date类
java.util 包提供了 Date 类来封装当前的日期和时间。 Date 类提供两个构造函数来实例化 Date 对象。
构造器
date() :获取从1970/01/01开始的毫秒数
Date中的方法
Long getTime(): 获取时间戳(也就毫秒数)
int compareTo(Date date)
比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。
2.格式化
两种方式:使用printf格式化日期,使用SimpleDateFormat类
printf格式化日期
格式
:以%t开头加上转换符。具体的转换符含义如下表:
转 换 符 | 说 明 | 示 例 |
---|---|---|
c | 包括全部日期和时间信息 | 星期六 十月 27 14:21:20 CST 2007 |
F | "年-月-日"格式 | 2007-10-27 |
D | "月/日/年"格式 | 10/27/07 |
r | "HH:MM:SS PM"格式(12时制) | 02:25:51 下午 |
T | "HH:MM:SS"格式(24时制) | 14:28:16 |
R | "HH:MM"格式(24时制) | 14:28 |
代码
:
//日期对象使用printf格式化日期
System.out.printf("现在的日期格式:%tF%n",date);
System.out.printf("现在的日期格式:%tD%n",date);
System.out.printf("现在的日期格式:%tr%n",date);
System.out.printf("现在的日期格式:%tT%n",date);
System.out.printf("现在的日期格式:%tR%n",date);
效果
:
SimpleDateFormat类
说明
:SimpleDateFormat类是线程不安全的。SimpleDateFormat类是使用字符串来作为编码格式的。
在此模式中,所有的 ASCII 字母被保留为模式字母,定义如下:
字母 | 描述 | 示例 |
---|---|---|
G | 纪元标记 | 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 |
D | 一年中的日子 | 360 |
F | 一个月中第几周的周几 | 2 (second Wed. in July) |
w | 一年中第几周 | 40 |
W | 一个月中第几周 | 1 |
a | A.M./P.M. 标记 | PM |
k | 一天中的小时(1~24) | 24 |
K | A.M./P.M. (0~11)格式小时 | 10 |
z | 时区 | Eastern Standard Time |
' | 文字定界符 | Delimiter |
" | 单引号 | ` |
代码
:
//日期对象的格式转换SimpleDateFormat格式化
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String date1 = sdf.format(date);
System.out.println(date1);
//SimpleDateFormat的练习
//日期转换格式联系
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM");
String date2 = sdf1.format(date);
String date3 = sdf2.format(date);
System.out.println(date2);
System.out.println(date3);
效果:
SimpleDateFormat类转成Date对象
代码
:
//SimpleDateFormat 转成 date格式 注意:若格式为YYYY-MM-dd 转换是不对的,我把YYYY改成了yyyy
String dateS = "2021-03-21 ";
SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd");
try {
Date date4 = sdf3.parse(dateS);
System.out.println(sdf3.format(date4));
} catch (ParseException e) {
e.printStackTrace();
}
String dates1 = "2021-08-20 10:45:60";
SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
try {
Date date5 = sdf4.parse(dates1);
System.out.println(sdf4.format(date5));
} catch (ParseException e) {
e.printStackTrace();
}
效果
:
3.calendar类
calendar类可以获取时间特定的部分,比如小时,分钟,秒,还可以在日期上作加减。
注意:celendar类是一个抽象类。
通过代码来了解
//date时间计算Calendar类基本使用
//创建calendar类
Calendar calendar = Calendar.getInstance();//这是获取当前的时间
Date date5 = calendar.getTime(); //这是将calendar转成date
System.out.println(date5);
//创建calendar可以指定时间
Calendar calendar1 = Calendar.getInstance();
calendar1.set(2021,6-1,12);
Date cDate = calendar1.getTime();
SimpleDateFormat CSdf = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(CSdf.format(cDate));
//使用set设置时间
Calendar calendar2 = Calendar.getInstance();
calendar2.set(2021,8-1,20);
Date cDate1 = calendar2.getTime();
SimpleDateFormat cSdf = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(cSdf.format(cDate1));
//使用add设置
Calendar calendar3 = Calendar.getInstance();
calendar3.add(Calendar.DATE,10); //10的参数是表示在当前日期后十天的日期
Date cDate2 = calendar3.getTime();
SimpleDateFormat cSdf2 = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(cSdf2.format(cDate2));
//使用add设置时间
Calendar calendar4 = Calendar.getInstance();
calendar4.add(Calendar.YEAR,2);
Date cDate3 = calendar4.getTime();
System.out.println(cDate3);
//calendar类对象信息的获取
Calendar calendar5 = Calendar.getInstance();
int year = calendar5.get(Calendar.YEAR);
int month = calendar5.get(Calendar.MONTH);
int day = calendar5.get(Calendar.DATE);
int hour = calendar5.get(Calendar.HOUR);
int minute = calendar5.get(Calendar.MINUTE);
int second = calendar5.get(Calendar.SECOND);
System.out.println(year+" "+month+" "+day+" "+hour+" "+minute+" "+second);