Java 入门 31 常用API 日期与时间
![](https://img2022.cnblogs.com/blog/1805814/202206/1805814-20220628145141176-619837689.png)
Date类
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.ITheima.API_Object; import java.util.Date; /** * 目标:学会使用Date类处理时间,获取时间的信息 */ public class Test9 { public static void main(String[] args) { //1 创建一个Date类的对象,代表系统此刻日期时间对象 Date d = new Date(); System.out.println(d);//Tue Jun 28 14:54:48 CST 2022 //2 获取时间毫秒值 long time = d.getTime(); System.out.println(time); long t1 = System.currentTimeMillis(); System.out.println(t1); //计算当前时间往后走1小时121秒之后的时间是多少 //1 获取当前时间 long time1 = System.currentTimeMillis(); //2 当前时间往后走1小时121秒 time1 += (60 * 60 + 121) * 1000; //3 把当前毫秒值转换成相应的日期对象 //Date d1=new Date(time1); //System.out.println(d1); Date d3=new Date(); d3.setTime(time1); System.out.println(d3); } }
SimpleDateFormat类
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.ITheima.API_Object; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * 目标:SimpleDateFormat 简单日期格式化类的使用 * 格式化时间 * 解析时间 */ public class TestDemo11 { public static void main(String[] args) { //1 日期对象 Date d=new Date(); System.out.println(d); //2 格式化这个日期时间(指定最终格式化的形式) SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss EEE a"); //3 开始格式化对象成为喜欢的字符串形式 String rs=sdf.format(d); System.out.println(rs);//2022年06月28日 15:23:37 星期二 下午 //4 格式化时间毫秒值 long time=System.currentTimeMillis()+121*1000; String rs2=sdf.format(time); System.out.println(rs2); System.out.println("----------------------"); } }
简单日期格式化
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.ITheima.API_Object; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Test12 { public static void main(String[] args) throws ParseException { // 解析时间 /** * 学会使用SimpleDateFormat解析字符串时间成为日期对象 *有一个时间 21021年08月06日 11:11::11在往后2天14小时 49分 06秒后的时间是多少 */ //1 把字符串时间拿到程序中来 String dataStr="2021年08月06日 11:11:11"; //2 把字符串时间解析成日期对象(重点) :形式必须与被解释时间的形式完全一直,否则运行时解析报错; SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); Date d = sdf.parse(dataStr); //3 往后走2天14小时 49分 06秒 long time=d.getTime()+(2L*24*60*60+14*60*60+49*60+6)*1000; //4格式化这个时间毫秒值 就是结果 System.out.println(sdf.format(time));//2021年08月09日 02:00:17 } }
案例
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.ITheima.API_Object; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Test15 { public static void main(String[] args) throws ParseException { //1 开始 和结束时间 String startTime="2021-11-11 00:00:00"; String endTime="2021-11-11 00:10:00"; //2 小家 小皮 String xiaoJia="2021-11-11 00:03:47"; String xiaoPi="2021-11-11 00:10:11"; //3 解释他们的时间 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date d1=sdf.parse(startTime); Date d2=sdf.parse(endTime); Date d3=sdf.parse(xiaoJia); Date d4=sdf.parse(xiaoPi); if(d3.after(d1)&&d3.before(d2)){ System.out.println("xiaoJia秒杀成功"); }else{ System.out.println("xiaoJia秒杀失败"); } if(d4.after(d1)&&d4.before(d2)){ System.out.println("xiaoPi秒杀成功"); }else{ System.out.println("xiaoPi秒杀失败"); } } }
Calendar 抽象类
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.ITheima.API_Object; import java.util.Calendar; import java.util.Date; public class Test16 { public static void main(String[] args) { //1 拿到系统此刻日历对象 Calendar cal = Calendar.getInstance(); System.out.println(cal); //2 获取日历的信息:public int get(int field) 取日期中的某个字段信息 int year = cal.get(Calendar.YEAR); System.out.println(year); int mm = cal.get(Calendar.MONTH) + 1;//月份从0开始算起 System.out.println(mm); int days = cal.get(Calendar.DAY_OF_YEAR); System.out.println(days); //3public void set(int field,int value); 修改日历的某个字段信息 // cal.set(Calendar.HOUR,12); //System.out.println(cal); //4 public void add(int field ,int value); 修改日历的某个字段信息, //请问64天后是什么时间 cal.add(Calendar.DAY_OF_YEAR,64); //59分钟后是什么时间 cal.add(Calendar.MINUTE,59); //5 public final Date getTime();拿到此刻的日期对象 Date d=cal.getTime(); System.out.println(d); //6 public long getTimeInMillis(); long time=cal.getTimeInMillis(); System.out.println(time); } }
JDK8 开始新加的API
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.itheima.d4_jdk8_time; import java.time.LocalDate; import java.time.LocalTime; import java.time.MonthDay; public class Demo04UpdateTime { public static void main(String[] args) { LocalTime nowTime = LocalTime.now(); System.out.println(nowTime);//当前时间 System.out.println(nowTime.minusHours(1));//一小时前 System.out.println(nowTime.minusMinutes(1));//一分钟前 System.out.println(nowTime.minusSeconds(1));//一秒前 System.out.println(nowTime.minusNanos(1));//一纳秒前 System.out.println("----------------"); System.out.println(nowTime.plusHours(1));//一小时后 System.out.println(nowTime.plusMinutes(1));//一分钟后 System.out.println(nowTime.plusSeconds(1));//一秒后 System.out.println(nowTime.plusNanos(1));//一纳秒后 System.out.println("------------------"); // 不可变对象,每次修改产生新对象! System.out.println(nowTime); System.out.println("---------------"); LocalDate myDate = LocalDate.of(2018, 9, 5); LocalDate nowDate = LocalDate.now(); System.out.println("今天是2018-09-06吗? " + nowDate.equals(myDate));//今天是2018-09-06吗? false System.out.println(myDate + "是否在" + nowDate + "之前? " + myDate.isBefore(nowDate));//2018-09-05是否在2018-09-06之前? true System.out.println(myDate + "是否在" + nowDate + "之后? " + myDate.isAfter(nowDate));//2018-09-05是否在2018-09-06之后? false System.out.println("---------------------------"); // 判断今天是否是你的生日 LocalDate birDate = LocalDate.of(1996, 8, 5); LocalDate nowDate1 = LocalDate.now(); MonthDay birMd = MonthDay.of(birDate.getMonthValue(), birDate.getDayOfMonth()); MonthDay nowMd = MonthDay.from(nowDate1); System.out.println("今天是你的生日吗? " + birMd.equals(nowMd));//今天是你的生日吗? false } }
时间戳
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.itheima.d4_jdk8_time; import java.time.Instant; import java.time.LocalDate; import java.time.ZoneId; import java.util.Date; public class Demo05Instant { public static void main(String[] args) { // 1、得到一个Instant时间戳对象 Instant instant = Instant.now(); System.out.println(instant); // 2、系统此刻的时间戳怎么办? Instant instant1 = Instant.now(); System.out.println(instant1.atZone(ZoneId.systemDefault())); // 3、如何去返回Date对象 Date date = Date.from(instant); System.out.println(date); Instant i2 = date.toInstant(); System.out.println(i2); } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.itheima.d4_jdk8_time; import java.time.LocalDate; import java.time.Period; public class Demo07Period { public static void main(String[] args) { // 当前本地 年月日 LocalDate today = LocalDate.now(); System.out.println(today);// // 生日的 年月日 LocalDate birthDate = LocalDate.of(1998, 10, 13); System.out.println(birthDate); Period period = Period.between(birthDate, today);//第二个参数减第一个参数 System.out.println(period.getYears()); System.out.println(period.getMonths()); System.out.println(period.getDays()); } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.itheima.d4_jdk8_time; import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; public class Demo09ChronoUnit { public static void main(String[] args) { // 本地日期时间对象:此刻的 LocalDateTime today = LocalDateTime.now(); System.out.println(today); // 生日时间 LocalDateTime birthDate = LocalDateTime.of(1990,10,1, 10,50,59); System.out.println(birthDate); System.out.println("相差的年数:" + ChronoUnit.YEARS.between(birthDate, today)); System.out.println("相差的月数:" + ChronoUnit.MONTHS.between(birthDate, today)); System.out.println("相差的周数:" + ChronoUnit.WEEKS.between(birthDate, today)); System.out.println("相差的天数:" + ChronoUnit.DAYS.between(birthDate, today)); System.out.println("相差的时数:" + ChronoUnit.HOURS.between(birthDate, today)); System.out.println("相差的分数:" + ChronoUnit.MINUTES.between(birthDate, today)); System.out.println("相差的秒数:" + ChronoUnit.SECONDS.between(birthDate, today)); System.out.println("相差的毫秒数:" + ChronoUnit.MILLIS.between(birthDate, today)); System.out.println("相差的微秒数:" + ChronoUnit.MICROS.between(birthDate, today)); System.out.println("相差的纳秒数:" + ChronoUnit.NANOS.between(birthDate, today)); System.out.println("相差的半天数:" + ChronoUnit.HALF_DAYS.between(birthDate, today)); System.out.println("相差的十年数:" + ChronoUnit.DECADES.between(birthDate, today)); System.out.println("相差的世纪(百年)数:" + ChronoUnit.CENTURIES.between(birthDate, today)); System.out.println("相差的千年数:" + ChronoUnit.MILLENNIA.between(birthDate, today)); System.out.println("相差的纪元数:" + ChronoUnit.ERAS.between(birthDate, today)); } }