API(日期时间)

 

 

日期时间:

  • Date(获取日期时间对象)
  • 1、获取当前时间:
1 //创建一个日期对象,代表此刻日期时间对象
2 Date date = new Date();
3 System.out.println("当前时间:" + date);

运行结果:

 从打印结果可以看出,打印的并非date对象本身(地址),而是具体的日期时间,这就说明Date类重写了父类的toString方法。

  • 2、获取时间毫秒值
1         //获取时间毫秒值
2         Date date = new Date();
3         long time = date.getTime();
4         System.out.println(time);
5         System.out.println("-------方式二--------");
6         long time2 = System.currentTimeMillis();
7         System.out.println(time2);

 

 运行结果:

 

 两者若有稍微时间差的原因是因为程序的执行需要消耗一定的时间

  • 案例:请计算出当前时间往后走1小时121秒后的时间:

< 方法一 >

 1         //1、得到当前时间毫秒值
 2         long time = System.currentTimeMillis();
 3         Date date = new Date();
 4         System.out.println(date);
 5 
 6         //2、当前时间加上1小时121秒
 7         long retTime = time + (60 * 60 + 121) * 1000;
 8         //3、把最终计算得出的时间毫秒值转换成日期对象
 9         Date date2 = new Date(retTime);
10         System.out.println(date2);

运行结果:

 

 < 方法二 >

1         long time = System.currentTimeMillis();
2         System.out.println(new Date());
3 
4         time += (60 * 60 + 121) * 1000;
5         Date date = new Date();
6         date.setTime(time); //通过setTime的方式
7         System.out.println(date);

结果示例:

 

  •  SimpleDateFormat(格式化日期时间格式)
  • 1、格式化日期时间对象:
1         //1、创建一个日期时间对象
2         Date date = new Date();
3         System.out.println(date);
4 
5         //2、格式化改日期时间对象
6         SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss EEE a"); //EEE:星期几,a:上下午
7         //3、格式化日期时间对象成字符串格式
8         String ret = sdf.format(date);
9         System.out.println(ret);

 

结果示例:

  •  格式化时间毫秒值:

继上述代码添加上一下代码:

1         //拓展:格式化时间毫秒值,并计算121秒之后的时间
2         long time = System.currentTimeMillis() + 121 * 1000;
3         String formatTime = sdf.format(time);
4         System.out.println(formatTime);

 

  • 2、解析时间案例:请计算出 2021年08月06日 11:11:11,往后走2天14小时49分06秒的时间:
 1         //时间:2021年08月06日 11:11:11,往后2天14小时49分06秒
 2         //1、用字符串保存开始时间
 3         String beginTime = "2021年08月06日 11:11:11";
 4         //2、把字符串时间解析成日期时间对象
 5         SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
 6         Date date = sdf.parse(beginTime); //使用parse需要抛出ParseException异常
 7         //3、把所得日期对象转换成时间毫秒值在加上往后走的时间
 8         long time =  date.getTime() + (2 * 24 * 60 * 60 + 14 * 60 * 60 + 49 * 60 + 6) * 1000L;
 9         //4、格式化最终的时间毫秒值
10         String lastTime = sdf.format(time);
11         System.out.println(lastTime);

 

 

  •  3、练习案例(秒杀活动):
  • 需求:
  • 小贾下单并付款的时间为:2020年11月11日 0:03:47
  • 小皮下单并付款的时间为:2020年11月11日 0:10:11
  • 用代码说明两位同学有没有成功参加秒杀活动
 1  public static void main(String[] args) throws ParseException {  //使用parse需要抛出异常
 2         //开始时间和结束时间
 3         String beginTime = "2020年11月11日 0:00:00";
 4         String endTime = "2020年11月11日 0:10:00";
 5 
 6         //存储两位同学秒杀的字符串时间
 7         String strXiaoJia = "2020年11月11日 0:03:47";
 8         String strXiaoPi = "2020年11月11日 0:10:11";
 9 
10         //格式化时间成日期时间对象
11         SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
12         Date startTime = sdf.parse(beginTime);
13         Date lastTime = sdf.parse(endTime);
14         Date dateXiaoJia = sdf.parse(strXiaoJia);
15         Date dateXiaoPi = sdf.parse(strXiaoPi);
16 
17         //判断是否在秒杀时间内
18         if(dateXiaoJia.after(startTime) && dateXiaoJia.before(lastTime)){
19             System.out.println("小贾秒杀成功");
20         }else {
21             System.out.println("小贾秒杀失败");
22         }
23         if(dateXiaoPi.after(startTime) && dateXiaoPi.before(lastTime)){
24             System.out.println("小皮秒杀成功");
25         }else {
26             System.out.println("小皮秒杀失败");
27         }
28     }

 

  •  Calender
 1 public static void main(String[] args) {
 2         //拿到日期对象
 3         Calendar calendar = Calendar.getInstance();
 4         //打印calendar对象里边的所有信息
 5         System.out.println(calendar);
 6         //通过get方法获取日历某一项信息
 7         System.out.println(calendar.get(Calendar.YEAR)); //年份
 8         System.out.println(calendar.get(Calendar.MONTH) + 1);//月份 (0~11)
 9         System.out.println(calendar.get(Calendar.DAY_OF_MONTH)); //
10         System.out.println(calendar.get(Calendar.SECOND));
11 
12         System.out.println("-----------");
13         //修改日历的信息(几乎不用)
14 //        calendar.set(Calendar.YEAR,2025);
15 //        System.out.println(calendar.get(Calendar.YEAR)); //年份 2025
16         //64天,56分,35秒之后是什么时间
17         calendar.add(Calendar.DAY_OF_YEAR,63);
18         calendar.add(Calendar.MINUTE,56);
19         calendar.add(Calendar.SECOND,35);
20         System.out.println(calendar.get(Calendar.YEAR)); //年份
21         System.out.println(calendar.get(Calendar.MONTH) + 1);//月份 (0~11)
22         System.out.println(calendar.get(Calendar.DAY_OF_MONTH)); //
23         System.out.println(calendar.get(Calendar.SECOND)); //24 
25         //日历拿到当前时间毫秒值(很少用)
26         long time = calendar.getTimeInMillis();
27         System.out.println(time);
28     }

 示例结果:

  •  JDK8开始新增日期API(内容超多,具体使用在查找API文档)
  • localDate:
 1 public static void main(String[] args) {
 2         //1、获取本地日期对象
 3         LocalDate nowDate = LocalDate.now();
 4         System.out.println("当前时间" + nowDate);
 5         System.out.println("当前年份:" + nowDate.getYear());
 6         System.out.println("当前月份(英文):" + nowDate.getMonth());
 7         System.out.println("当前月份(数字):" + nowDate.getMonthValue());
 8         System.out.println("-----------");
 9         System.out.println("当前年份第几天:" + nowDate.getDayOfYear());
10         System.out.println("星期(英文):" + nowDate.getDayOfWeek());
11         System.out.println("星期(数字):" + nowDate.getDayOfWeek().getValue());
12         System.out.println("月份(英文):" + nowDate.getMonth());
13         System.out.println("月份(数字):" + nowDate.getMonth().getValue());
14         System.out.println("---------------");
15         LocalDate ld = LocalDate.of(1998,12,25);
16         System.out.println("拿出指定时间:" + ld);
17         LocalDate ld2 = LocalDate.of(1998, Month.DECEMBER, 25);
18         System.out.println("设定英文月份:" + ld2);
19     }

示例结果;

 

  •  localTime :
 1 public static void main(String[] args) {
 2         //获取本地日期时间对象
 3         LocalTime lt = LocalTime.now();
 4         System.out.println("当前系统时间:" + lt);
 5         System.out.println("小时:" + lt.getHour());
 6         System.out.println("分钟:" + lt.getMinute());
 7         System.out.println("秒:" + lt.getSecond());
 8         System.out.println("纳秒:" + lt.getNano());
 9         System.out.println("------------");
10         LocalTime lt2= LocalTime.of(19,30); //指定时、分
11         System.out.println("指定时、分:" + lt2);
12         System.out.println("指定时、分、秒:" + LocalTime.of(19,30,28));
13         System.out.println("指定时、分、秒、纳秒:" + LocalTime.of(19,30,28,1556));
14     }

示例结果:

  •  LocalDateTime(LocalDateTime综合了LocalDate和LocalTime里面的方法) :
 1 public static void main(String[] args) {
 2         //获取当前日期时间对象
 3         LocalDateTime ldt = LocalDateTime.now();
 4         System.out.println("系统当前时间:" + ldt);
 5         System.out.println("年份:" + ldt.getYear());
 6         System.out.println("月份(英文):" + ldt.getMonth());
 7         System.out.println("月份(数字):" + ldt.getMonthValue());
 8         System.out.println("日:" + ldt.getDayOfMonth());
 9         System.out.println("时:" + ldt.getHour());
10         System.out.println("分:" + ldt.getMinute());
11         System.out.println("秒:" + ldt.getSecond());
12         System.out.println("纳秒:" + ldt.getNano());
13         System.out.println("星期几(英文):" + ldt.getDayOfWeek());
14         System.out.println("星期几(数字):" + ldt.getDayOfWeek().getValue());
15         System.out.println("一年中第几天:" + ldt.getDayOfYear());
16         System.out.println("---------------");
17         LocalDate ld = ldt.toLocalDate();//转换成LocalDate对象
18         LocalTime lt = ldt.toLocalTime();//转换成LocalTime对象
19     }

结果示例:

 

  •  关于修改相关的API
 1 public static void main(String[] args) {
 2         LocalDate lt = LocalDate.now(); //创建LocalDate对象
 3         System.out.println(lt);
 4         //当前时间加上2年3个月13天3周后的时间
 5         LocalDate addLt = lt.plusYears(2).plusMonths(3).plusDays(15).plusWeeks(5);
 6         System.out.println(addLt);
 7         //当前时间减去2年3个月13天3周后的时间
 8         LocalDate minusLt = lt.minusYears(2).minusMonths(3).minusDays(15).minusWeeks(5);
 9         System.out.println(minusLt);
10         //将当前时间修改为2018年10月1日
11         LocalDate modifyLd = lt.withYear(2018).withMonth(10).withDayOfMonth(1);
12         System.out.println(modifyLd);
13         //比较两个时间
14         System.out.println(lt.isAfter(minusLt));
15         System.out.println(lt.isBefore(addLt));
16         System.out.println(lt.isBefore(modifyLd));
17         System.out.println("----------------");
18         //判断两个日期是否相等(比较两个日期是否相等)
19         LocalDate birthDate = LocalDate.of(1998,12,15);
20         System.out.println(birthDate.equals(lt));
21         //使用MonthDay(工具)类的of方法,从birthDate对象中通过get方法取到月份、日份
22         MonthDay md = MonthDay.of(birthDate.getMonth(),birthDate.getDayOfMonth()) ;
23         MonthDay md2 = MonthDay.from(birthDate);
24         System.out.println(md);
25         System.out.println(md2);
26         //是否为生日
27         System.out.println(md.equals(md2));
28     }

示例运行结果:

 

  •  Instant时间戳
 1 public static void main(String[] args) {
 2         //获取当前时间戳对象
 3         Instant instant = Instant.now();
 4         System.out.println("世界标准时间:(0时区)" + instant);
 5         //获取系统此刻时间
 6         Instant instantSystem = Instant.now();
 7         ZonedDateTime defaultTime =  instantSystem.atZone(ZoneId.systemDefault());
 8         System.out.println("所在时区时间:" + defaultTime);
 9         //返回Date对象
10         Date date = Date.from(instant);
11         System.out.println(date);
12         //Date对象转成时间戳
13         Instant dti = date.toInstant();
14         System.out.println(dti);
15     }

 

  •  DateTimeFormat
 1 public static void main(String[] args) {
 2         LocalDateTime ldt = LocalDateTime.now();
 3         System.out.println("LocalTime默认时间格式:" + ldt);
 4         //创建格式化器
 5         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss EEE a");
 6         //<方法一>正向格式化:
 7         String ret = dtf.format(ldt);
 8         System.out.println("自定义日期时间格式(正向格式化):" + ret);
 9         //<方法二>逆向格式化
10         String ret2 = ldt.format(dtf);
11         System.out.println("自定义日期时间格式(逆向格式化):" + ret2);
12         //解析字符串时间对象
13         //创建格式化器
14         DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
15         String strTime = "2022年05月05日 11:46:04";
16         LocalDateTime strToLdt = LocalDateTime.parse(strTime,dtf2); //按照dtf2的格式格式化改字符串
17         System.out.println(strToLdt);
18     }
  • Period
 1 public static void main(String[] args) {
 2         //创建LocalDate对象
 3         LocalDate ld = LocalDate.now();
 4         System.out.println(ld);
 5         //生日的年、月、日
 6         LocalDate birthDate = LocalDate.of(2000,4,10);
 7         System.out.println(birthDate);
 8         Period period = Period.between(birthDate,ld); //参数二减去参数一
 9         System.out.println(period);
10         System.out.println(period.getYears());
11         System.out.println(period.getMonths());
12         System.out.println(period.getDays());
13     }

  •  Duration
 1 public static void main(String[] args) {
 2         //闯将LocalDateTime时间对象,年-月-日
 3         LocalDateTime ldt = LocalDateTime.now();
 4         System.out.println("当前时间:" + ldt);
 5         //出生日期 : 年-月-日-时-分-秒
 6         LocalDateTime birthDate = LocalDateTime.of(2012,8,16,0,0,0);
 7         System.out.println("自定义时间:" + birthDate);
 8         //时间差
 9         Duration duration = Duration.between(birthDate,ldt); //参数二减去参数一
10         System.out.println("时间差:" + duration);
11         System.out.println("时间差(天数):" + duration.toDays());
12         System.out.println("时间差(小时):" + duration.toMinutes());
13         System.out.println("时间差(秒):" + duration.toMinutes());
14         System.out.println("时间差(毫秒):" + duration.toMinutes());
15         System.out.println("时间差(纳秒):" + duration.toNanos());
16     }

示例结果:

 

  •  ChronoUnit
 1 public static void main(String[] args) {
 2         //创建LocalDateTime时间对象:此刻
 3         LocalDateTime ldt = LocalDateTime.now();
 4         System.out.println("系统此刻时间:" + ldt);
 5         //指定年月日时分秒
 6         LocalDateTime birLdt = LocalDateTime.of(1998,3,12,14,45,36);
 7         System.out.println("指定时间:" + birLdt);
 8         //计算两个日期对象时间间隔
 9         System.out.println("------两个日期对象时间间隔------");
10         Long years = ChronoUnit.YEARS.between(birLdt,ldt);
11         System.out.println("年份:" + years);
12         System.out.println("月份:" + ChronoUnit.MONTHS.between(birLdt,ldt));
13         System.out.println("周数:" + ChronoUnit.WEEKS.between(birLdt,ldt));
14         System.out.println("天数:" + ChronoUnit.DAYS.between(birLdt,ldt));
15         System.out.println("秒数:" + ChronoUnit.MILLIS.between(birLdt,ldt));
16         System.out.println("纳秒数:" + ChronoUnit.NANOS.between(birLdt,ldt));
17     }

ChronoUnit工具类提供的日期时间API可谓是相当丰富的,除此之外还有半天、十年、世纪、千年、纪年等时间差,上边也只是列出了比较可能常用的API(需要用其他的在查即可),ChronoUnit是一个枚举类。

posted @ 2022-05-05 18:01  羽梦齐飞  阅读(140)  评论(0编辑  收藏  举报