日期相关类
java8 以前的日期相关类:
System类:
package com.lagou.task13; public class SystemTest { public static void main(String[] args) { // 1.获取当前系统时间距离1970年1月1日0时0分0秒的毫秒数 long msec = System.currentTimeMillis(); System.out.println("当前系统时间距离1970年1月1日0时0分0秒已经过去" + msec + "毫秒了!"); // 通常用于测试某一段代码的执行效率 } }
常用于测试算法的时间复杂度.
Date类:
package com.lagou.task13; import java.util.Date; public class DateTest { public static void main(String[] args) { // 1.使用无参方式构造Date对象并打印 Date d1 = new Date(); System.out.println("d1 = " + d1); // 获取当前系统时间 System.out.println("------------------------------------"); // 2.使用参数指定的毫秒数来构造Date对象并打印 1秒 = 1000毫秒 东八区 Date d2 = new Date(1000); System.out.println("d2 = " + d2); // 1970 1 1 8 0 1 System.out.println("------------------------------------"); // 3.获取调用对象距离1970年1月1日0时0分0秒的毫秒数 long msec = d2.getTime(); System.out.println("获取到的毫秒数是:" + msec); // 1000 // 4.设置调用对象所表示的时间点为参数指定的毫秒数 d2.setTime(2000); System.out.println("修改后的时间是:" + d2); // 1970 1 1 8 0 2 } }
java.text.SimpleDateFormat 类:
主要用于实现日期和文本之间的转换.
package com.lagou.task13; import java.text.SimpleDateFormat; import java.util.Date; public class SimpleDateFormatTest { public static void main(String[] args) throws Exception { // 1.获取当前系统时间并打印 Date d1 = new Date(); System.out.println("d1 = " + d1); // 2.构造SimpleDateFormat类型的对象并指定格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 3.实现日期类型向文本类型的转换并打印 // alt+Enter 可以实现返回值的生成 String format = sdf.format(d1); System.out.println("转换后的日期为:" + format); // 4.实现文本类型到日期类型的转换并打印 Date parse = sdf.parse(format); System.out.println("转回日期格式的结果为:" + parse); } }
Calendar 类:
java.util.Calender类主要用于描述特定的瞬间,取代Date类中的过时方法实现全球化。
该类是个抽象类,因此不能实例化对象,其具体子类针对不同国家的日历系统,
其中应用最广泛的 是GregorianCalendar(格里高利历),对应世界上绝大多数国家/地区使用的标准日历系统。
package com.lagou.task13; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class CalendarTest { public static void main(String[] args) { // 1.使用过时的方法按照指定的年月日时间分来构造对象 Date d1 = new Date(2008-1900, 8-1, 8, 20, 8, 8); // 2.设置日期对象的格式并打印 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String format = sdf.format(d1); System.out.println("获取到的时间是:" + format); // 2008 8 8 20 8 8 System.out.println("-----------------------------------------------------"); // 2.使用取代的方式按照指定的年月日时分秒来构造对象 // 2.1 获取Calendar类型的引用 // 考点:既然Calendar是个抽象类不能创建对象,那么下面的方法为啥可以获取Calendar类型的引用呢? // 解析:由源码可知,返回的并不是Calendar类型的对象,而是Calendar类的子类GregorianCalendar等对象,形成了多态 // 多态的使用场合之三 Calendar instance = Calendar.getInstance(); // 2.2 设置指定的年月日时分秒信息 instance.set(2008, 8-1, 8, 20, 8, 8); // 2.3 转换为Date类型的对象 Date d2 = instance.getTime(); String format1 = sdf.format(d2); System.out.println("获取到的时间是:" + format1); // 2008 8 8 20 8 8 System.out.println("-----------------------------------------------------"); // 3.向指定的字段设置以及增加指定的数值 instance.set(Calendar.YEAR, 2018); // 转换为Date类型并按照指定的格式打印 Date d3 = instance.getTime(); System.out.println("设置年份后的结果是:" + sdf.format(d3)); // 2018 8 8 20 8 8 instance.add(Calendar.MONTH, 2); Date d4 = instance.getTime(); System.out.println("增加月份后的结果是:" + sdf.format(d4)); // 2018 10 8 20 8 8 } }
多态的3种使用场合,important!!!
- 通过方法的参数传递形成多态;
public static void draw(Shape s){ s.show(); } draw(new Rect(1, 2, 3, 4));
- 在方法体中直接使用多态的语法格式
Account acc = new FixedAccount();
- 通过方法的返回值类型形成多态
Calender getInstance(){ //返回值类型是接口或者抽象类或者父类,但是返回的是具体的子类 return new GregorianCalendar(zone, aLocale); }
Java8中的日期相关类:
LocalDate类,LocalTime 类,LocalDateTime类:
package com.lagou.task13; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; public class LocalDateTimeTest { public static void main(String[] args) { // 1.获取当前日期信息并打印 LocalDate now = LocalDate.now(); System.out.println("获取到的当前日期是:" + now); // 2.获取当前时间信息并打印 LocalTime now1 = LocalTime.now(); System.out.println("获取到的当前时间是:" + now1); // 3.获取当前日期时间信息并打印,使用最多 LocalDateTime now2 = LocalDateTime.now(); System.out.println("获取到的当前日期时间是:" + now2); System.out.println("-------------------------------------------------------"); // 4.使用参数指定的年月日时分秒信息来获取对象并打印 // 使用ctrl+F12来查找指定的方法 LocalDateTime of = LocalDateTime.of(2008, 8, 8, 20, 8, 8); System.out.println("指定的日期时间是:" + of); // 自动调用toString方法 System.out.println("获取到的年是:" + of.getYear()); // 2008 System.out.println("获取到的月是:" + of.getMonthValue()); // 8 System.out.println("获取到的日是:" + of.getDayOfMonth()); // 8 System.out.println("获取到的时是:" + of.getHour()); // 20 System.out.println("获取到的分是:" + of.getMinute()); // 8 System.out.println("获取到的秒是:" + of.getSecond()); // 8 System.out.println("-------------------------------------------------------"); // 5.实现特征的设置并打印 // 与String类型相似,调用对象本身的数据内容不会改变,返回值相当于创建了一个新的对象,由此证明了不可变性 LocalDateTime localDateTime = of.withYear(2012); System.out.println("localDateTime = " + localDateTime); // 2012-08-08T20:08:08 System.out.println("of = " + of); // 2008-08-08T20:08:08 LocalDateTime localDateTime1 = localDateTime.withMonth(12); System.out.println("localDateTime1 = " + localDateTime1); // 2012 12 8 20 8 8 System.out.println("-------------------------------------------------------"); // 6.实现特征的增加并打印 LocalDateTime localDateTime2 = localDateTime1.plusDays(2); System.out.println("localDateTime2 = " + localDateTime2); // 2012 12 10 20 8 8 System.out.println("localDateTime1 = " + localDateTime1); // 2012 12 8 20 8 8 LocalDateTime localDateTime3 = localDateTime2.plusHours(3); System.out.println("localDateTime3 = " + localDateTime3); // 2012 12 10 23 8 8 System.out.println("-------------------------------------------------------"); // 7.实现特征的减少并打印 LocalDateTime localDateTime4 = localDateTime3.minusMinutes(1); System.out.println("localDateTime4 = " + localDateTime4); // 2012 12 10 23 7 8 System.out.println("localDateTime3 = " + localDateTime3); // 2012 12 10 23 8 8 LocalDateTime localDateTime5 = localDateTime4.minusSeconds(3); System.out.println("localDateTime5 = " + localDateTime5); // 2012 12 10 23 7 5 } }
Instant 类:
java.time.Instant类主要用于描述瞬间的时间点信息。
package com.lagou.task13; import java.time.Instant; import java.time.OffsetDateTime; import java.time.ZoneOffset; public class InstantTest { public static void main(String[] args) { // 1.使用Instant类来获取当前系统时间 并不是当前系统的默认时区 本初子午线 差8小时 东八区 Instant now = Instant.now(); System.out.println("获取到的当前时间为:" + now); // 2.加上时区所差的8个小时 OffsetDateTime offsetDateTime = now.atOffset(ZoneOffset.ofHours(8)); System.out.println("偏移后的日期时间为:" + offsetDateTime); System.out.println("--------------------------------------------------------"); // 3.获取当前调用对象距离标准基准时间的毫秒数 long g1 = now.toEpochMilli(); System.out.println("获取到的毫秒差为:" + g1); // 4.根据参数指定的毫秒数来构造对象 Instant instant = Instant.ofEpochMilli(g1); System.out.println("根据参数指定的毫秒数构造出来的对象为:" + instant); } }
DateTimeFormatter类:
package com.lagou.task13; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAccessor; public class DateTimeFormatterTest { public static void main(String[] args) { // 1.获取当前系统的日期时间并打印 LocalDateTime now = LocalDateTime.now(); System.out.println("now = " + now); // 2.按照指定的格式准备一个DateTimeFormatter类型的对象 DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); // 3.实现日期时间向字符串类型的转换并打印 String str = dateTimeFormatter.format(now); System.out.println("调整格式后的结果是:" + str); // 4.实现字符串类型到日期时间类型的转换并打印 TemporalAccessor parse = dateTimeFormatter.parse(str); System.out.println("转回去的结果是:" + parse); } }
补充内容:
java获取时间戳的几种方式:
long currentTime=System.currentTimeMillis();
long currentTime=Calendar.getInstance().getTimeInMillis();
long currentTime=new Date().getTime();
时间戳转LocalDateTime:
Timestamp timestamp1 = new Timestamp(1617883688000L); LocalDateTime localDateTime = timestamp1.toLocalDateTime();
LocalDateTime 转时间戳:
LocalDateTime now = LocalDateTime.now(); Timestamp timestamp = Timestamp.valueOf(now); long time = timestamp.getTime();
文章来自拉勾教育 大数据开发