------- android培训、java培训、期待与您交流! ----------
Date类
Java提供了Date类来处理日期,时间,Date对象即包含日期,也包含时间。Date类从JDK1.0起就存在了,但正因为它历时悠久,所以它的大部分构造器,方法都已经过时了,不再推荐使用了。
Date类提供了6个构造器,其中四个已经Deprecated,剩下的两个构造器如下。
Date(); 生成一个代表当前日期时间的Date对象,该构造器在底层调用System,currenTimeMillis() 获得long整数作为日期参数,
Date(long date):根据指定的long型整数来生成一个Date对象。该构造器的参数表示创建的Date对象和GMT 1970年1月1日 00:00:00之间的时间差,以毫秒作为计时单位。
与构造器相同的是,Date对象的大部分方法也Deprecated了,剩下为数不多的几个方法。
boolean after(Date when): 测试该日期是否在指定日期之后。
boolean before(Date when):测试该日期是否在指定日期when之前。
long getTime():返回该时间对应的long型整数,即从GMT 1970-01-01 00:00:00 到该Date对象之间的时间差,以毫秒作为计时单位。
void setTime(long time):设置该Date对象的时间。
下面程序示范了Date类的用法。
public class DateDemo { public static void main(String[] args) { Date d1 = new Date(); System.out.println(d1); //获取当前时间之后100ms的时间 Date d2 = new Date(System.currentTimeMillis() + 100); System.out.println(d2); System.out.println(d1.compareTo(d2)); System.out.println(d1.before(d2)); System.out.println(d1.after(d2)); } }
Date是一个设计相当糟糕的类,因此java官方推荐尽量少用Date的构造器和方法。如果需要对日期,时间进行加减运算,或获取指定时间的年,月,日,时,分,秒,信息,可使用Calendar工具类。
Calendar类
因为Date类在设计上存在一些缺陷,所以java提供了Calendar类来更好的处理日期和时间。Calendar是一个抽象类,它用于表示日历。
Calendar是一个抽象类,所以不能使用构造器来创建Calendar对象,但它提供了几个静态getInstance()方法来获取Calendar对象,这些方法根据TimeZone,Locale来创建Calendar
Calendar 与Date都是表示日期的工具类,它们直接可以自由转换,如下代码所示。
//创建一个默认的Calendar对象 Calendar calendar = Calendar.getInstance(); //从Calendar对象中取出Date对象 Date date = calendar.getTime(); System.out.println(date); //通过Date对象获得对应的Calendar对象 //因为Calendar没有构造函数可以接收Date对象 //所以必须先获得一个Calendar实例,然后调用其setTime()方法 Calendar calendar2 = Calendar.getInstance(); calendar.setTime(date);
java8新增的日期,时间包。以下是常用类的使用方法。
1 public class TimeDemo 2 { 3 public static void main(String[] args) 4 { 5 //-----下面是关于Clock的用法------------------------------------------------------------------ 6 //获取当前Clock 7 Clock clock = Clock.systemUTC(); 8 //通过Clock获取当前的时刻 9 System.out.println("当前时刻为:" + clock.instant()); 10 11 //获取对应的毫秒数,与System.currentTimeMillis()输出相同 12 System.out.println(clock.millis()); 13 System.out.println(System.currentTimeMillis()); 14 15 //-----下面是关于Duration的用法------------------------------------------------------------ 16 Duration d = Duration.ofSeconds(6000); 17 System.out.println("6000秒相当于" + d.toMinutes() + "分"); 18 System.out.println("6000秒相当于" + d.toHours() + "小时"); 19 System.out.println("6000秒相当于" + d.toDays() + "天"); 20 21 //在clock基础上增加6000秒,返回新的clock 22 Clock clock2 = Clock.offset(clock, d); 23 //可以看到clock2与clock相差1小时40分 24 System.out.println("当前时刻加6000秒为:" + clock2.instant()); 25 26 //----------------下面是关于Instant的用法------------------------------------------------------ 27 //获取当前时间 28 Instant instant1 = Instant.now(); 29 System.out.println("当前时刻为:" + instant1); 30 31 //instant增加6000秒,返回新的instant 32 Instant instant2 = instant1.plusSeconds(6000); 33 System.out.println("当前时刻加6000秒为:" + instant2); 34 35 //根据字符串解析Instant对象 36 Instant instant3 = Instant.parse("2016-02-23T03:29:50.342Z"); 37 System.out.println(instant3); 38 39 //在instant3的基础上添加 5小时4分钟 40 Instant instant4 = instant3.plus(Duration.ofHours(5).plusMinutes(4)); 41 System.out.println(instant4); 42 43 //获取instant4的5天以前的时刻 44 Instant instant5 = instant4.minus(Duration.ofDays(5)); 45 System.out.println(instant5); 46 47 //------下面是关于LocalDate的用法------------------------------------------------- 48 LocalDate localDate = LocalDate.now(); 49 System.out.println(localDate); 50 51 //获得2014 年的第146天 52 localDate = LocalDate.ofYearDay(2014, 146); 53 System.out.println(localDate); //2014-05-26 54 55 //设置为2014年5月21日 56 localDate = LocalDate.of(2014, Month.MAY, 21); 57 System.out.println(localDate); //2014-05-21 58 59 //-----下面是关于LocalTime的用法------------------------------------------------------- 60 //获取当前时间 61 LocalTime localTime = LocalTime.now(); 62 63 //设置为22点33分 64 localTime = LocalTime.of(22, 33); 65 System.out.println(localTime); //22:33 66 67 //返回一天中的第5503秒 68 localTime = LocalTime.ofSecondOfDay(5503); 69 System.out.println(localTime); //01:31:43 70 71 //-----下面是关于LocalDateTime的用法------------------------------------------------------- 72 //获取当前日期,时间 73 LocalDateTime localDateTime = LocalDateTime.now(); 74 System.out.println(localDateTime); 75 76 //当前日期,时间加上25小时3分钟 77 LocalDateTime future = localDateTime.plusHours(25).plusMinutes(3); 78 System.out.println("当前日期,时间的25小时3分钟之后:" + future); 79 80 81 //-----下面是关于Year, YearMonth,MonthDay的用法------------------------------------------- 82 Year year = Year.now(); //获取当前的年份 83 System.out.println("当前的年份:" + year); 84 85 year = year.plusYears(5); //当前年份再加5年 86 System.out.println("当前年份再过5年" + year); 87 88 //根据指定月份获取 YearMonth 89 YearMonth ym = year.atMonth(10); 90 System.out.println("year年10月:" + ym); //2021-10 91 92 //当前年月再加5年,减3个月 93 ym = ym.plusYears(5).minusMonths(3); 94 System.out.println("当前年月再加5年,减3个月:" + ym); 95 96 97 MonthDay md = MonthDay.now(); 98 System.out.println("当前月日:" + md); //--02-23 99 100 //设置为5月23日 101 MonthDay md2 = md.with(Month.MAY).withDayOfMonth(23); 102 System.out.println("5月23日为" + md2); 103 104 105 } 106 }