一、Date java.util包
Date是用来表示时间的类,时间精确到毫秒。现在使用的时间是从1970.1.1开始的
1、Date类的构造方法
2、使用方法
具体见代码
@Test
void test01() {
//日期的实例化
//获取系统当前时间
Date date = new Date();
System.out.println(date);//Tue Nov 24 15:35:27 CST 2020
//获取系统从1970年到现在的毫秒值
System.out.println(date.getTime());
//使用系统操作类获取从1970年到现在的毫秒值
System.out.println(System.currentTimeMillis());
// //分配 Date 对象并初始化此对象,即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。
// Date date01 = new Date(6000);
// System.out.println(date01);//Thu Jan 01 08:00:06 CST 1970
//获取信息
//获取的是从1900年到现在的年份差
System.out.println("获取年"+date.getYear());//获取年120
System.out.println("获取月"+date.getMonth());//获取月10
//获取日,0---6,星期天为0
System.out.println("获取日"+date.getDay());//获取日2
System.out.println("获取时间"+date.getHours());//获取时间15
/*小例子
* 出发时间,返回时间
*/
//获取当前时间
Date date01 = new Date();
Date date02 = new Date(date01.getTime()+(24*60*60*1000*2));//两天后的时间
System.out.println(date01);
System.out.println(date02);
//判断时间是否在指定时间的前面和后面
System.out.println(date01.before(date02));//true
System.out.println(date01.after(date01));//false
}
二、DateFormat和SimpleDateFormat
SimpleDateFormat是DateFormat抽象类的实现类
在之前我们输出的时间要么是国际时间,要么是毫秒时间,使用日期格式转换器,来进行输出格式转换。
1、步骤
- 创建转换器,并设定模板,pattern
- 使用方法转换
将date转换为String采用的方法
format( date date );
将String转换为date采用的方法
parse( String sourse );
2、代码演示:
@Test
void test02() {
//创建转换器
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd--HH点mm分ss秒");
SimpleDateFormat sdf01 = new SimpleDateFormat("yyyy-MM-dd");
//将date按格式输出
//首先获取系统当前时间
Date date = new Date();
//使用format将日期转换为字符串
String format = sdf.format(date);
System.out.println(format);//2020年11月24--16点17分43秒
//输入一个格式时间,来得到一个date
String dt = "2020-12-05";
try {
//使用parse方法将字符串转换为日期
Date parse = sdf01.parse(dt);//Sat Dec 05 00:00:00 CST 2020
System.out.println(parse);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//格式转换,指定时间
@Test
void test03() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//将date按格式输出
String dt = "2020-12-05";
try {
Date parse = sdf.parse(dt);
System.out.println("得到的date是"+parse.getMonth());//得到的date是11
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
三、Calender
1、常用方法。
- getInstance();
- get( int field);
- set( int field,int value);
- set( int year, int mouth, int date);
- set( int year , int month , int date , int hourOfDay ,int minute );
- set( int year , int month , int date , int hourOfDay ,int minute,int second );
- add( int field , int amount );
2、具体的代码演示
@Test
void cl01(){
//获取对象
Calendar calendar = Calendar.getInstance();
//获取具体的日历属性值
System.out.println("年---"+calendar.get(1));//年---2020
//获取年的第二种方法
System.out.println("年---"+calendar.get(Calendar.YEAR));//年---2020
System.out.println("月---"+calendar.get(Calendar.MONTH));//月---10
System.out.println("今年的第几天---"+calendar.get(Calendar.DAY_OF_YEAR));//今年的第几天---329
System.out.println("本月的第几天---"+calendar.get(Calendar.DAY_OF_MONTH));//本月的第几天---24
System.out.println("本周的第几天---"+calendar.get(Calendar.DAY_OF_WEEK));//本周的第几天---3
System.out.println("时---"+calendar.get(Calendar.HOUR));//时---5
System.out.println("分---"+calendar.get(Calendar.MINUTE));//分---5
System.out.println("秒---"+calendar.get(Calendar.SECOND));//秒---38
}
@Test
void cl02(){
//将Calendar转为date
Calendar calendar = Calendar.getInstance();
Date time = calendar.getTime();
System.out.println(time);//Tue Nov 24 17:07:59 CST 2020
//重新设置
calendar.set(Calendar.DAY_OF_MONTH, 16);
System.out.println(calendar.getTime());//Mon Nov 16 17:10:50 CST 2020
calendar.set(Calendar.DAY_OF_WEEK, 2);
System.out.println(calendar.getTime());//Mon Nov 16 17:11:50 CST 2020
}
@Test
void cl03(){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个日期");
String time = sc.next();
//将输入的字符串保存到SimpleDateFormat中
try {
Date parse = sdf.parse(time);
System.out.println(parse);
Calendar calendar = sdf.getCalendar();
System.out.println(calendar.getTime());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 键盘输入的数据 转为 Calendar
@Test
void calen02() {
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
Scanner input = new Scanner(System.in);
String date=input.next();
try {
// 转换
sdf.parse(date);
Calendar calendar = sdf.getCalendar();
System.out.println(calendar);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
四、jdk1.8的日期类
4、1Year 、 YearMonth、Month
@Test
void test01() {
//YearMonth
//获取系统当前时间
YearMonth now = YearMonth.now();
System.out.println(now);//2020-11
YearMonth of = YearMonth.of(2019, 5);
System.out.println(of);//2019-05
//Year
//获取最大支持的一年
System.out.println(Year.MAX_VALUE);//999999999
//获取最小支持的一年
System.out.println(Year.MIN_VALUE);//-999999999
//获取当前的年份对象
Year now2 = Year.now();
//输出年份
System.out.println(now2);//2020
Year of2 = Year.of(2018);
System.out.println(of2);//2018
System.out.println(now2.isAfter(of2));//true
//Month
//month是月的表示对象
//系统当前所表示的年份
Month of3 = Month.of(11);
//获取这个月的最大长度
System.out.println(of3.maxLength());//30
//获取价值年月
System.out.println(of3.getValue());//11
//获取三个月过后是哪一月
Month plus = of3.plus(3);
System.out.println(plus.getValue());//2
System.out.println(plus.maxLength());//29
Month[] values = Month.values();
System.out.println(values.length);//12
}
4、2本地时间
本地日期( LocalDate )、本地时间( LocalTime )、本地日期时间( LocalDateTime )
@Test
void test02() {
//日期时间,只有年月日
LocalDate ls = LocalDate.now();
System.out.println(ls);//2020-11-24
//时间 时分秒
LocalTime now = LocalTime.now();
System.out.println(now);//18:51:13.991
//年月日时分秒
LocalDateTime now2 = LocalDateTime.now();
System.out.println(now2);//2020-11-24T18:51:13.991
}
4、3Instant时间戳
瞬时时间,在某一个时间节点上的时间
//时间戳,也称瞬时时间
@Test
void test03() {
//我们在东8区,所以时间加上8小时,就是我们的北京时间
Instant now = Instant.now();
System.out.println(now);//2020-11-24T10:55:28.372Z
//将瞬时时间转为date
//从1970-01-01t00:00:00z java时代得到的秒数
long epochSecond = now.getEpochSecond();
Calendar instance = Calendar.getInstance();
instance.setTimeInMillis(epochSecond*1000);
Date time = instance.getTime();
System.out.println(time);
}
4、4时间间隔
代码演示如下:
// 时间间隔
@Test
void test04() {
// 获取当前时间Temporal可以使用的已知实现子类
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
LocalDateTime end = LocalDateTime.now();
System.out.println(end);
// 进行比较
Duration between = Duration.between(now, end);
// 将此持续时间转换为毫秒内的总长度。
System.out.println(between.toMillis());// 2002
}
// 时间间隔
@Test
void test05() {
//获取当前时间Temporal可以使用的已知实现子类
LocalDate now = LocalDate.of(2020,10,15);
LocalDate end = LocalDate.of(2020,12,10);
//进行比较
Period between = Period.between(now, end);
System.out.println(between.getDays());
}
4、5Colck
@Test
void test06() {
Clock clock = Clock.systemDefaultZone();
//获取时钟的当前时刻。
System.out.println(clock.instant());//2020-11-24T11:29:31.981Z
//获取时钟的当前毫秒瞬间。
System.out.println(clock.millis());//1606217371983
}