前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >还用Date表示时间?LocalDateTime看这里

还用Date表示时间?LocalDateTime看这里

作者头像
程序员云帆哥
发布2022-05-12 10:34:39
8030
发布2022-05-12 10:34:39
举报
文章被收录于专栏:程序员云帆哥

文章目录

一、为啥要抛弃Date

  当工作中遇到时间处理,我们是否首先想到JAVA提供的DateCalendar,用于处理日期、时间的类,包括创建日期、时间对象,获取系统当前日期、时间等操作。

1、获取时间

代码语言:javascript
复制
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());
    }
}

控制台输出

代码语言:javascript
复制
当前时间:Wed Jan 08 11:26:38 CST 2020
当前年份:120
当前月份:0

第一行:可读性太差,看不大懂 第二行:120?今年是2020年,还得手工+1900 第三行:0?现在是1月份,还得手工+1

2、线程安全性问题

  除了使用不方便之外,还有一个大隐患,Date时间类是可变类,这就意味着在多线程环境下对共享 Date变量进行操作时,必须由程序员自己来保证线程安全!否则极有可能翻车。

二、JDK 8新增日期和时间的新类

  Java 8为Date和Time引入了新的API,以解决旧java.util.Date和java.util.Calendar的缺点。   Java 8时间类库中的核心类,比如LocalDate, LocalTime, LocalDateTime, ZonedDateTime, Period, Duration以及它们的api。

1、获取时间

代码语言:javascript
复制
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());
    }
}

控制台输出

代码语言:javascript
复制
当前时间:2020-01-07T19:35:27.505
当前年份:2020
当前月份:JANUARY
当前日份:7
当前时:19
当前分:35
当前秒:27

2、日期修改

代码语言:javascript
复制
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); //修改月份
	}
}

3、日期格式化

代码语言:javascript
复制
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
	}
}

4、时间反解析

代码语言:javascript
复制
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);
    }
}

控制台输出

代码语言:javascript
复制
字符串反解析后的时间为:2020-01-07T19:21

5、线程安全性问题

  Java 8开始推出的 LocalDateTime却是线程安全的,开发人员不用再考虑并发问题。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-01-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、为啥要抛弃Date
    • 1、获取时间
      • 2、线程安全性问题
      • 二、JDK 8新增日期和时间的新类
        • 1、获取时间
          • 2、日期修改
            • 3、日期格式化
              • 4、时间反解析
                • 5、线程安全性问题
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档