日期,格式化 Java学习day015

文章目录数字格式化Junit
日期相关操作
Date类
格式化时间日期的对象SimpleDateFormat在jdk8之后 , 系统不再推荐使用这些类如上的的日期和时间处理类都是非线程安全类 , 在早期没有高并发的情况可以正常使用 。高并发的情况下 , 使用这些类 , 都会出现非线程安全问题!!!!
JDK8之前获取当前系统时间
JDK8之前的日期操作了解即可
Date date = new Date();System.out.println(date); // Mon Jul 26 21:02:16 CST 2021
【日期,格式化Java学习day015】Date date = new Date();// 获取当前时间的时间戳 ,  1970-01-01 00:00:00 距离当前的毫秒数System.out.println(date.getTime()); // 1627304881732// java还可以通过System类获取时间戳 , 可以获取当前时间戳System.out.println(System.currentTimeMillis()); // 1627304881732// 日期对象 --->字符串格式化时间// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");String format = sdf.format(date);// System.out.println(format);// 2021-07-26 21:10:30System.out.println(format);// 2021年07月26日 21时08分01秒// 字符串 ---> 日期对象String strTime = "2018年10月8日 12:12:12";DateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");Date date2 = sdf2.parse(strTime); // 这个地方会报编译的错误【throws ParseException】System.out.println(date2); // Mon Oct 08 12:12:12 CST 2018
因为Date的设计具有"千年虫"以及"时区"的问题 , 所以Date中的大部分方法已经不建议使用了 , 它们都被java.util.类所取代

日期,格式化  Java学习day015

文章插图
科普:千年虫BUG
一开始是使用六位数字来储存时间 , 其表现形式就类似“95.11.02” , 意思就是1995年11月2号
如果到了2000年 , 那前两位数字应该就是“00” , 而计算机终归不是人类 , “00”对它们来说不一定就是2000年 , 也有可能是公元1900年或公元1000年 , 这样就会得到不正确的计算结果 , 进而引发一系列的问题
可以看到上面的方法都划了横线 , 就代表这个方法不推荐使用
Date date = new Date();// 千年虫BUG事件System.out.println(date.getYear()); // 121(ps:121 + 1900 = 2021)System.out.println(date.getMonth() + 1); // 7System.out.println(date.getDate()); // 26
JDK8之后
package com.openlab.day15.date;import java.time.Instant;import java.time.LocalDate;import java.time.LocalDateTime;import java.time.LocalTime;import java.time.format.DateTimeFormatter;public class JDK8DateTIme {public static void main(String[] args) {// 本地日期LocalDate localDate = LocalDate.now();System.out.println(localDate); // 2021-07-26System.out.println(localDate.getDayOfMonth()); // 26System.out.println(localDate.getDayOfYear()); // 207// 本地时间LocalTime localTime = LocalTime.now();System.out.println(localTime); // 21:19:58.785762400// 日期+时间的对象LocalDateTime dateTime = LocalDateTime.now();System.out.println(dateTime); // 2021-07-26T21:19:58.785762400// 专门用来格式化日期时间的对象String str = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));System.out.println(str); // 2021-07-26 21:19:58// 将日期字符串解析为日期对象LocalDateTime ldt = LocalDateTime.parse("2000年03月08日 14:52:18", DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss"));System.out.println(ldt); // 2000-03-08T14:52:18// 伦敦标准时间 , 就是经度为0的 , 0时区时间Instant instant = Instant.now();System.out.println(instant); // 2021-07-26T13:19:58.798728800Z}}