Java日期类
编辑时间:2021/05/08
读完本节:大概花费 8分钟,共871词
文章目录
1.JDK1.8之前的日期类
1.Date
-
Date类属于java.util包下的一个类
-
常用的实例化方式
//无参构造器实例化得到的是当前时间 Date d = new Date();
//使用带有参数(long date)的构造器,实例化的Date对象指定的毫秒数的时间 Date d = new Date(long date);
-
获取当前时间的毫秒数
Date d = new Date(); d.getTime();
通过对象.getTime()获取当前时间到基准时间的毫秒数。基准时间:1970年1月1日
2.Calendar
-
Calendar类属于java.util包下的一个类
-
Calendar实例化的方式
Calendar c = Calendar.getInstance();
-
Calendar实例化的方式与Date类实例化的方式不同,不想Date类Calendar类私有化了自己的构造器,通过getInstance()方法来获取实例。
-
Calendar类获取日期、时间
Calendar c = Calendar.getInstance(); //通过对象.get(Calendar.常量)的方式获取常量的值 System.out.println(c.get(Calendar.YEAR));//获取当前年份 System.out.println(c.get(Calendar.MONTH));//获取当前月份,注意一月份是0 System.out.println(c.get(Calendar.DAY_OF_MONTH));//获取当前是该月的第几天 System.out.println(c.get(Calendar.HOUR_OF_DATE));//获取当前是该天的第几个小时 System.out.println(c.get(Calendar.MINUTE));//获取当前的分钟数 System.out.println(c.get(Calendar.SECOND));//获取当前的秒数
-
设置Calendar对象的时间
Calendar c = Calendar.getInstance(); c.set(1988,1,1);//此时设置的时间中的月份也是从0开始的 c.add(Calendar.YEAR,3);//三年之后 c.add(Calender.MONTH,-1);//一个月之前 Calendar c1 = Calendar.getInstance(); System.out.println(c.after(c1));//false 判断c是否在c1日期之后 System.out.println(c.before(c1));//false 判断c是否在c1日期之前
3.SimpleDateFormat
-
SimpleDateFormat格式化时间,可以根据指定的格式生成时间
SimpleDateFormat sdf = new SimpleDateFormat(yyyy-MM-dd);
常见的日期格式:
Pattern dd.MM.yy yyyy.MM.dd. G ‘at’ hh:mm:ss z EEE, MMM d, “yy” h:mm a H:mm H:mm:ss:SSS K:mm a,z yyyy.MMMMM.dd GGG hh:mm aaa -
使用实例
@Test public void simpleDateFormatTest() throws ParseException{ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String d = "2021-05-08"; Date date = sdf.parse(d); System.out.println(date); }
2.JDK1.8及以后的日期类
1.LocalDate
-
实例化
LocalDate date = LocalDate.now();//当前时间2021 05 08
-
获取年月日
System.out.println(date.getYear());//获取年 System.out.println(date.getMonth());//获取月 System.out.println(date.getDayOfMonth());//获取当前是当月的第几天 System.out.println(date.getDayOfYear());//获取当前是当年的第几天
-
日期比较
LocalDate date1 = LocalDate.parse("2020-05-08"); System.out.println(date.compareTo(date1));//0 System.out.println(date.equals(date1));//true
-
闰年
通过LocalDate的闰年判断方法,终于不用自己苦苦判断了。
System.out.println("是否是闰年" + date.isLeapYear());
-
计算
date = date.plusMonth(3); System.out.println("三个月后的日期" + date); date = date.minusMonth(5); System.out.println("五个月前的日期" + date);
2.LocalTime
-
实例化
LocalTime time = LocalTime.now();
-
时间运算
LocalTime localTime = LocalTime.now(); System.out.println("当前时间" + localTime); localTime = localTime.plusHour(3); System.out.println("三个小时后的时间" + localTime);
3.DateTimeFormatter
-
DateTimeFormatter与SimpleDateFormat相似,只不过一个前者线程安全,后者线程不安全
-
使用实例
@Test public void dateTimeFormatterTest throws ParseException(){ DateTimeFormatter formatter = DateTimeFormatter.ofParttern("yyyy-MM-dd"); LocalDate date = LocalDate.parse("2021-05-08",formatter); System.out.println(formatter.format(date)); }
3.日期类之间的转换
-
字符串日期格式转换为日期类:可以使用SimpleDateFormat或者DateTimeFormatter,使用SimpleDateFormat如上述所示
/** * 日期转换成字符串 */ @Test public void stringToSimpleDateFormat() throws ParseException{ Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat(yyyy-MM-dd); String s = sdf.format(date); System.out.println(s); }
-
Date与LocalDate相互转换
//Date转换为LocalDate Date d = new Date(); System.out.println("date: " + d); LocalDate dt = d.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); System.out.println("LocalDate: " + dt); //LocalDate转换为Date ZonedDateTime zdt = LocalDate.now().atStartOfDay(ZoneId.systemDefault()); Date d = Date.from(zdt.toInstant()); System.out.println(d);