当工作中遇到时间处理,我们是否首先想到JAVA提供的Date和Calendar,用于处理日期、时间的类,包括创建日期、时间对象,获取系统当前日期、时间等操作。
public class DateTest {
public static void main(String[] args) {
Date date = new Date();
System.out.println("当前时间:" + date);
System.out.println("当前年份:" + date.getYear());
System.out.println("当前月份:" + date.getMonth());
}
}
控制台输出:
当前时间:Wed Jan 08 11:26:38 CST 2020
当前年份:120
当前月份:0
第一行:可读性太差,看不大懂 第二行:120?今年是2020年,还得手工+1900 第三行:0?现在是1月份,还得手工+1
除了使用不方便之外,还有一个大隐患,Date时间类是可变类,这就意味着在多线程环境下对共享 Date变量进行操作时,必须由程序员自己来保证线程安全!否则极有可能翻车。
Java 8为Date和Time引入了新的API,以解决旧java.util.Date和java.util.Calendar的缺点。 Java 8时间类库中的核心类,比如LocalDate, LocalTime, LocalDateTime, ZonedDateTime, Period, Duration以及它们的api。
public class LocalDateTimeTest {
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println("当前时间:" + localDateTime);
System.out.println("当前年份:" + localDateTime.getYear());
System.out.println("当前月份:" + localDateTime.getMonth());
System.out.println("当前日份:" + localDateTime.getDayOfMonth());
System.out.println("当前时:" + localDateTime.getHour());
System.out.println("当前分:" + localDateTime.getMinute());
System.out.println("当前秒:" + localDateTime.getSecond());
}
}
控制台输出:
当前时间:2020-01-07T19:35:27.505
当前年份:2020
当前月份:JANUARY
当前日份:7
当前时:19
当前分:35
当前秒:27
public class LocalDateTimeTest {
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.now();
localDateTime.plusYears(50); //增加50年
localDateTime.minusMonths(6); //减少6个月
localDateTime.withYear(2100); //修改年份
localDateTime.withMonth(6); //修改月份
}
}
public class LocalDateTimeTest {
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.now();
rightNow.format(DateTimeFormatter.ISO_DATE ); //YYYY-MM-DD
rightNow.format( DateTimeFormatter.BASIC_ISO_DATE ); //YYYYMMDD
rightNow.format( DateTimeFormatter.ofPattern("yyyy/MM/dd") ); //YYYY/MM/DD
}
}
public class LocalDateTimeTest {
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.parse("2020--01--07 19:21",DateTimeFormatter.ofPattern("yyyy--MM--dd HH:mm"));
System.out.println("字符串反解析后的时间为:" + localDateTime);
}
}
控制台输出:
字符串反解析后的时间为:2020-01-07T19:21
Java 8开始推出的 LocalDateTime却是线程安全的,开发人员不用再考虑并发问题。