java8的日期、时间类
一Date类(历史悠久) 月份与小时从0开始,天数从1开始,年从1900开始
二.Calendar类
①抽象类
②不能直接实例化
三.使用
1 import java.util.Date; 2 3 public class Demo_Date 4 { 5 public static void main(String[] args) 6 { 7 //获取当前时间 8 Date d=new Date(); 9 //获取当前时间一百秒后的时间 10 Date d2=new Date(System.currentTimeMillis()+100); 11 //比较时间d是否在d2之前 12 System.out.println(d.before(d2)); 13 //比较时间先后顺序,若在此之前则返回-1,若相等则返回0,否则返回1 14 System.out.println(d.compareTo(d2)); 15 } 16 }
四.set方法的延迟性
1 import java.text.SimpleDateFormat; 2 import java.util.Calendar; 3 import java.util.Date; 4 /** 5 * set()方法的延迟性 6 * 当使用set修改月份的时候,字段确实改变 7 * 但是只有使用get()、gettime()、getTimeMillis()、add()、roll()才会重新计算日历时间 8 */ 9 public class AddTest{ 10 public static void main(String[] args) { 11 //实例化一个calendar类 12 Calendar cal=Calendar.getInstance(); 13 //设置时间 14 cal.set(2018, 11, 8, 14, 30,30);//延迟计算 15 //修改时间 16 cal.add(Calendar.MONTH, 6); 17 //计算时间并且接收 18 Date day=cal.getTime(); 19 //创建转换器 20 SimpleDateFormat sim=new SimpleDateFormat("y年M月d日 h:m:s"); 21 //转换为字符串格式 22 String result=sim.format(day); 23 //获取时间 24 System.out.println(result); 25 } 26 }
五.Calendar的容错性
容错机制开启时
1 import java.text.SimpleDateFormat; 2 import java.util.Calendar; 3 import java.util.Date; 4 5 /* 6 * Calendar的容错性:setLenient()方法 7 * 1.当容错性没有关闭时,将月份设置为13时(月份是从0开始,代表一月)显示为二月 8 * 并且会将YEAR字段加一(本实例当前时间是2018年) 9 * 2.当容错性关闭时,导致运行时异常 10 */ 11 public class LenientTest { 12 public static void main(String[] args) { 13 //实例化calendar对象 14 Calendar ca=Calendar.getInstance(); 15 16 //ca.setLenient(false);//关闭容错性 17 18 //随便设置一个时间 19 ca.set(Calendar.MONTH, 13); 20 //计算时间 21 Date day=ca.getTime(); 22 //创建转换器 23 SimpleDateFormat sim=new SimpleDateFormat("y年M月d日 h:m:s"); 24 //转换为字符串格式 25 String result=sim.format(day); 26 System.out.println(result); 27 } 28 }
容错机制关闭时
1 /* 2 * Calendar的容错性:setLenient()方法 3 * 1.当容错性没有关闭时,将月份设置为13时(月份是从0开始,代表一月)显示为二月 4 * 并且会将YEAR字段加一(本实例当前时间是2018年) 5 * 2.当容错性关闭时,导致运行时异常 6 */ 7 public class LenientTest { 8 public static void main(String[] args) { 9 //实例化calendar对象 10 Calendar ca=Calendar.getInstance(); 11 12 ca.setLenient(false);//关闭容错性 13 14 //随便设置一个时间 15 ca.set(Calendar.MONTH, 13); 16 //计算时间 17 Date day=ca.getTime(); 18 //创建转换器 19 SimpleDateFormat sim=new SimpleDateFormat("y年M月d日 h:m:s"); 20 //转换为字符串格式 21 String result=sim.format(day); 22 System.out.println(result); 23 } 24 }
六.java8新增的日期、时间包的使用(请自行查阅API文档)
1 import java.time.Clock; 2 import java.time.Duration; 3 import java.time.Instant; 4 import java.time.LocalDate; 5 import java.time.LocalDateTime; 6 import java.time.LocalTime; 7 import java.time.Month; 8 import java.time.MonthDay; 9 import java.time.Year; 10 import java.time.YearMonth; 11 /** 12 * systemUTC()方法返回当前时间使用UTC时区转换为日期和时间 13 */ 14 public class TimeClockTest { 15 public static void main(String[] args) { 16 //----下面是关于clock的用法---- 17 //获取当前clock 18 Clock clock=Clock.systemUTC(); 19 //通过Clock获取当前时刻 20 System.out.println("当前时刻为: "+clock.instant()); 21 //获取clock对应的毫秒数,与system.currentTimeMillis()输出相同 22 System.out.println(clock.millis()); 23 System.out.println(System.currentTimeMillis()); 24 //----下面是关于Duration的用法------ 25 Duration dur=Duration.ofSeconds(6000); 26 System.out.println("6000秒相当于: "+dur.toMinutes()+"分"); 27 System.out.println("6000秒相当于: "+dur.toMinutes()+"小时"); 28 System.out.println("6000秒相当于: "+dur.toDays()+"天"); 29 //在clock基础上增加6000秒,返回新的clock 30 Clock clock2=Clock.offset(clock, dur); 31 //可以看到clock2与clock相差1小时40分 32 System.out.println("当前时刻加6000秒为: "+clock2.instant()); 33 //下面是instant的用法 34 //获取当前时间 35 Instant instant=Instant.now(); 36 System.out.println(instant); 37 //instant添加6000秒,返回新的Instant 38 Instant instant2=instant.plusSeconds(6000); 39 System.out.println(instant2); 40 //根据字符串解析Instant对象 41 Instant instant3=instant.parse("2018-12-08T11:57:43.054Z"); 42 System.out.println(instant3); 43 //在instant3的基础上添加5小时4分钟 44 Instant instant4=instant3.plus(Duration.ofHours(5).plusMinutes(4)); 45 System.out.println(instant4); 46 //获取instant4五天前的时刻 47 Instant instant5=instant4.minus(Duration.ofDays(5)); 48 System.out.println(instant5); 49 //-----下面是关于LocalDate的用法----- 50 LocalDate localdate=LocalDate.now(); 51 System.out.println(localdate); 52 //获得2018年的第345天 53 localdate=LocalDate.ofYearDay(2018, 345); 54 System.out.println(localdate); 55 //设置为2018年12月31日 56 localdate=LocalDate.of(2018, Month.DECEMBER, 31); 57 System.out.println(localdate); 58 //---下面是关于LocalTime---的用法 59 //获取当前时间 60 LocalTime localtime=LocalTime.now(); 61 System.out.println(localtime); 62 //设置为22点33分 63 localtime=LocalTime.of(22, 33); 64 System.out.println(localtime); 65 //返回一天中的第5503秒 66 localtime=LocalTime.ofSecondOfDay(5503); 67 System.out.println(localtime); 68 //---下面是关于localDateTime的用法 69 //获取当前时间 70 LocalDateTime localdatetime=LocalDateTime.now(); 71 System.out.println(localdatetime); 72 //当前日期,时间加上25小时3分钟 73 LocalDateTime future=localdatetime.plusHours(25).plusMinutes(3); 74 System.out.println(future); 75 //---下面是关于year,yearMonth,MonthDay的用法示例--- 76 Year year=Year.now();//获取当前的年份 77 System.out.println("当前年份: "+year);//输出当前年份 78 year=year.plusYears(5); //当前年份再加5 79 System.out.println("当前年份再过5年: "+year); 80 //根据指定月份获取yearsMonth 81 YearMonth ym=year.atMonth(10); 82 System.out.println("year年10月: "+ym); 83 //当前年月再加5年.减三个月 84 ym=ym.plusYears(5).minusMonths(3); 85 System.out.println("year年10月再加5年,减3个月: "+ym); 86 MonthDay md=MonthDay.now(); 87 System.out.println("当前月日: "+md); 88 //设置为5月23日 89 MonthDay md2=md.with(Month.MAY).withDayOfMonth(23); 90 System.out.println("5月23日为: "+md2); 91 } 92 }