zoukankan      html  css  js  c++  java
  • 常用的一些开源小工具 之 日期时间类

    JDK8 之前,Java 只提供一个 Date 类,平常我们需要将 Date 按照一定格式转化成字符串,我们需要使用 SimpleDateFormat

    SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    // Date 转 字符串
    simpleDateFormat.format(new Date());
    // 字符串 转 Date
    simpleDateFormat.parse("2020-05-07 22:00:00");

    代码虽然简单,但是这里需要注意 SimpleDateFormat,不是线程安全的,多线程环境一定要注意使用安全。

    这里阿粉推荐  commons-lang3 下的时间工具类DateUtils/DateFormatUtils,解决 Date 与字符串转化问题。

    // Date 转化为字符串
    DateFormatUtils.format(new Date(),"yyyy-MM-dd HH:mm:ss");
    // 字符串 转 Date
    DateUtils.parseDate("2020-05-07 22:00:00","yyyy-MM-dd HH:mm:ss");

    除了格式转化之外,DateUtils 还提供时间计算的相关功能。

    Date now = new Date();
    // Date 加 1 天
    Date addDays = DateUtils.addDays(now, 1);
    // Date 加 33 分钟
    Date addMinutes = DateUtils.addMinutes(now, 33);
    // Date 减去 233 秒
    Date addSeconds = DateUtils.addSeconds(now, -233);
    // 判断是否 Wie 同一天
    boolean sameDay = DateUtils.isSameDay(addDays, addMinutes);
    // 过滤时分秒,若 now 为 2020-05-07 22:13:00 调用 truncate 方法以后
    // 返回时间为 2020-05-07 00:00:00
    Date truncate = DateUtils.truncate(now, Calendar.DATE);

    JDK8 时间类

    JDK8 之后,Java 将日期与时间分为 LocalDateLocalTime,功能定义更加清晰,当然其也提供一个 LocalDateTime,包含日期与时间。这些类相对于 Date 类优点在于,这些类与 String 类一样都是不变类型,不但线程安全,而且不能修改。

    现在 mybatis 等 ORM 框架已经支持 LocalDate 与 JDBC 时间类型转化,所以大家可以直接将时间字段实际类型定义为 JDK8 时间类型,然后再进行相关转化。

    如果依然使用的是 Date 类型,如果需要使用新的时间类型,我们需要进行相关转化。两者之间进行转化, 稍微复杂一点,我们需要显示指定当前时区。

    Date now = new Date();
    // Date-----> LocalDateTime 这里指定使用当前系统默认时区
    LocalDateTime localDateTime = now.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
    // LocalDateTime------> Date 这里指定使用当前系统默认时区
    Date date = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());

    接下来我们使用 LocalDateTime 进行字符串格式化。

    // 按照 yyyy-MM-dd HH:mm:ss 转化时间
    LocalDateTime dateTime = LocalDateTime.parse("2020-05-07 22:34:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
    // 将 LocalDateTime 格式化字符串
    String format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(dateTime);

    另外我们使用 LocalDateTime 获取当前时间年份,月份特别简单:

    LocalDateTime now = LocalDateTime.now();
    //
    int year = now.getYear();
    //
    int month = now.getMonthValue();
    //
    int day = now.getDayOfMonth();

    最后我们还可以使用 LocalDateTime 进行日期加减,获取下一天的时间:

    LocalDateTime now = LocalDateTime.now();
    // 当前时间加一天
    LocalDateTime plusDays = now.plusDays(1l);
    // 当前时间减一个小时
    LocalDateTime minusHours = now.minusHours(1l);
    // 还有很多其他方法
  • 相关阅读:
    VS编译cmake工程提示 “无法识别的标记”错误解决方法
    Markdown
    latex公式
    ros:time::now()详解
    c++中PROTOBUF遍历所有属性及值
    ORB-SLAM3相关博文
    WSL2安装及GUI图形界面配置踩坑指南
    ROS与PCL数据转换
    手眼标定中AX=XB求解方法及MATLAB、C++代码
    正则表达式用于数据清洗
  • 原文地址:https://www.cnblogs.com/alomsc/p/12887288.html
Copyright © 2011-2022 走看看