java中时间类的详细总结
目录
Date类
Date类中有两个构造方法,public Date() 和 public Date(long date) 可以用来表示当前的日期,或者将长整形数据表示成时间。
public void test() {
Date a = new Date(); //创建date对象,打印当前的日期和时间
System.out.println(a);
//输出>>>Fri May 07 08:35:23 CST 2021
Date b = new Date(1000); //参数是从1970年1月1日 00:00:00 GMT以来的毫秒数
System.out.println(b);
//输出>>>Thu Jan 01 08:00:01 CST 1970
getTime()的使用
getTime():表示1970年1月1号00:00:00到当前时刻的毫秒数,常用于时间计算的转化。
public void test0() {
Date a = new Date(); //getTime() 表示1970年1月1号00:00:00到当前时刻的毫秒数
System.out.println(a.getTime());
//输出>>>1620348546366
Calendar类
Calendar是一个抽象类,它为日历字段之间的转换提供了一些方法,也为操作日历字段提供了一些方法。
1:获取当前的日期
Calendar a = Calendar.getInstance(); //获取当前日期
System.out.print("年:"+a.get(Calendar.YEAR));
System.out.print("月:" +a.get(Calendar.MONTH));
System.out.print("日:"+ a.get(Calendar.DAY_OF_MONTH));
System.out.print("时:"+ a.get(Calendar.HOUR_OF_DAY));
System.out.print("分:"+ a.get(Calendar.MINUTE));
System.out.print("秒:"+ a.get(Calendar.SECOND));
//输出>>>年:2021月:4日:7时:8分:57秒:56
2:设置日期
Calendar b = Calendar.getInstance();
b.set(2021, 10, 1);
System.out.println(b); //指定一个日历将其打印出来 。注意:月份是从0开始计算,故要在所指定的月份基础上减1
3:日期的相关运算
Calendar a = Calendar.getInstance(); //获取当前日期
Calendar b = Calendar.getInstance();
a.add(Calendar.DATE, 15); //add.() 可以做日期的运算
System.out.print(a.get(Calendar.DATE)+"\t");
a.add(Calendar.YEAR, 2);
System.out.println(a.get(Calendar.YEAR)+"年");
//输出>>>22 2023年
if(a.before(b)) { //比较两个日期哪一个在前
System.out.println("是");
}else {
System.out.println("否");
}
//输出>>>否
System.out.println(a.after(b)); //比较两个日期哪一个在后
//输出>>>true
}
SimpleDateFormat类
使用SimpleDateFormat可以实现字符串和日期之间的相互转化
1:将字符串转化为日期
public void test() throws ParseException { //将字符串String转换为日期Date
String str = "2021-05-06 11:22";
SimpleDateFormat asd = new SimpleDateFormat("yyyy-MM-dd hh:mm");
Date as = asd.parse(str);
System.out.println(as);
}
//输出>>>Thu May 06 11:22:00 CST 2021
2:日期转化为字符串
public void test2() {
Date da = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); //此时间格式由自己规定
System.out.println( sdf.format(da)); //将日期Date转化为字符串String
}
//输出>>>2021-05-07 09:16:22
3:小练习:随意输入一个日期判断是周几
public void testRen() throws ParseException {
String str = "2021/05/06";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
Date date = sdf.parse(str); //完成将字符串转化为日期
Calendar ca = Calendar.getInstance();
ca.setTime(date); //将日期转化为calendar
System.out.println(ca.get(Calendar.DAY_OF_WEEK)-1);
}
//输出>>>4
java8中新时间
LocalDate类
只针对 年 月 日 做出处理,使用起来方便简单灵活,LocalDate线程安全,不用考虑高并发问题
LocalDate od = LocalDate.now(); // 获取当前日期
System.out.println(od);
//输出>>>2021-05-07
System.out.print(od.getYear()+"年"); //获取年,月,日
System.out.print(od.getMonthValue()+"月");
System.out.print(od.getDayOfMonth()+"日");
//输出>>>2021年5月7日
System.out.println(od.isLeapYear()); //直接判断是否为闰年
//输出>>>false
LocalDate oda = LocalDate.parse("2021-05-07");
System.out.print(od.compareTo(oda)+"\t"); //比较两日期 “日” 相差多少天
System.out.println(od.equals(oda)); //用于比较两日期是否相同
//输出>>>0 true
od = od.plusDays(5); //加
System.out.println("五天以后的日期:"+od);
//输出>>>五天以后的日期:2021-05-12
od = od.minusMonths(3);
System.out.println("三个月以前的日期:"+od);
//输出>>>三个月以前的日期:2021-02-12
LocalDate与Date之间的相互的转换
/**
* Date---LocalDate
*/
public void test6() {
Date t = new Date();
System.out.println("Date:"+t);
LocalDate dt = t.toInstant()
.atZone(ZoneId.systemDefault()) //默认时区
.toLocalDate(); //转化
System.out.println("LocalDate:"+dt);
//输出>>>Date:Fri May 07 09:50:46 CST 2021
// LocalDate:2021-05-07
/**
* LocalDate---Date
*/
ZonedDateTime adt = LocalDate.now()
.atStartOfDay(ZoneId.systemDefault());
Date d =Date.from(adt.toInstant());
System.out.println(d);
//输出>>>Fri May 07 00:00:00 CST 2021
LocalTime类
LocalTime只针对 时 分 秒 做出处理
/**
* Localtime
*/
@Test
public void test1() {
LocalTime to = LocalTime.now(); //获取当前时刻
System.out.println(to);
System.out.println(to.plusHours(6)); //加
System.out.println(to.minusHours(3)); //减
//输出>>>09:57:59.861
//输出>>>15:57:59.861
//输出>>>06:57:59.861
时区
全球分为24个时区,相邻时区时间相差1个小时。比如北京处于东八时区,东京处于东九时区,北京时间比东京时间晚1个小时,而英国伦敦时间比北京晚7个小时(英国采用夏令时时,8月英国处于夏令时)。
比如此刻北京时间是2017年8月24日11:17:10,则东京时间是2017年8月24日12:17:10,伦敦时间是2017年8月24日4:17:10。
@Test
public void test2() {
TimeZone timeZone = TimeZone.getTimeZone("GTM+8");
System.out.println("默认时区:"+TimeZone.getDefault().getDisplayName());
System.out.println(timeZone.getDisplayName());
}
//输出>>>默认时区:中国标准时间
//输出>>>格林威治时间
period类
period类表示一段时间的年,月,日 用between()方法获取两个日期之间的差
/**
* period类
*/
@Test
public void test3() {
LocalDate startda = LocalDate.parse("2021-02-05");
LocalDate endda = LocalDate.parse("2021-05-06");
Period pd = Period.between(startda, endda);
System.out.println("相差多少月:"+pd.getMonths()); //只针对月份
System.out.println("相差多少天:"+pd.getDays()); //只针对天数
long sa = endda.toEpochDay()-startda.toEpochDay();
System.out.println("两日期之间相差多少:"+sa+"天"); //考虑月份与天数相差多少天
//输出>>>相差多少月:3
//输出>>>相差多少天:1
//输出>>>两日期之间相差多少:90天
}
DateTimeFormat类
线程安全,可用于字符串与日期之间的相互转换
/**
* DateTimeFormat
*/
@Test
public void testF() {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd");
LocalDate od = LocalDate.parse("2021/05/07",dtf);
System.out.println(dtf.format(od));
//输出>>>2021/05/07
}