Java8---LocalDateTime,LocalDate与String的相互转换

   如果想要 Date 替换为新的日期类,通过原 Date 类新增的方法以及几个新增的类可以很方便的把 Date 类型转换为新的日期LocalTime,LocalDate,LocalDateTime 类型.不过转换的时候需要指定时区

        Date date = new Date();
        // 可以指定时区,这里指定 ZoneId.SHORT_IDS的("CTT", "Asia/Shanghai");
        LocalTime localTime = date.toInstant().atZone(ZoneId.of("CTT", ZoneId.SHORT_IDS)).toLocalTime();
        LocalDate localDate = date.toInstant().atZone(ZoneId.of("CTT", ZoneId.SHORT_IDS)).toLocalDate();
        // 也可以使用当前系统的默认时区
        LocalDateTime localDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();

    现在的 OOM框架已经支持使用jdk1.8的新日期类,以 Mybatis 为例,在其 3.4.5 版本已经支持.下面是一些新日期类型与字符串转换的基本使用方法.

/**
 * @author YoonaLt
 * LocalDateTime 与 LocalDate 都提供了 plus***(加),minus***(减)等方法
 */
public class DateTest {

    private static final String DETAIL_FORMAT_STRING = "yyyy-MM-dd HH:mm:ss";

    private static final String PROBABLY_FORMAT_STRING = "yyyy-MM-dd";

    private static final String DETAIL_REGEX = "(0[0-9]|1[0-9]|2[0-3]):(0[0-9]|[1-5][0-9]):(0[0-9]|[1-5][0-9])";

    private static final String PROBABLY_REGEX = "\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-9]|3[0|1])";

    /**
     * 获取当前月份长度, 28 or 29 or 30 or 31
     */
    public static int getLengthOfMonth(LocalDate localDate) {
        return localDate.lengthOfMonth();
    }

    /**
     * 获取当前月份长度, 28 or 29 or 30 or 31
     */
    public static int getLengthOfMonth(LocalDateTime localDateTime) {
        return getLengthOfMonth(localDateTime.toLocalDate());
    }

    /**
     * 获取当前年份天数, 365 or 366
     */
    public static int getLengthOfYear(LocalDate localDate) {
        return localDate.lengthOfYear();
    }

    /**
     * 获取当前年份天数, 365 or 366
     */
    public static int getLengthOfYear(LocalDateTime localDateTime) {
        return getLengthOfYear(localDateTime.toLocalDate());
    }

    /**
     * 格式化 LocalDate 为 String
     *
     * @param localDate 将要格式化的日期
     * @return 例如,  2020-04-03
     */
    public static String localDateToString(LocalDate localDate) {
        return DateTimeFormatter.ofPattern(PROBABLY_FORMAT_STRING).format(localDate);
    }

    /**
     * 格式化 LocalDateTime 为 String
     *
     * @param localDateTime 将要格式化的日期
     * @return 例如,  2020-04-03 14:12:02
     */
    public static String localDateTimeToString(LocalDateTime localDateTime) {
        return DateTimeFormatter.ofPattern(DETAIL_FORMAT_STRING).format(localDateTime);
    }

    /**
     * 字符串格式化为日期,字符串必须符合 yyyy-MM-dd 格式
     *
     * @param s 将要 LocalDate 化的字符串
     * @return LocalDate
     */
    public static LocalDate stringToLocalDate(String s) {
        return stringNotNull(s) && Pattern.matches(PROBABLY_REGEX, s) ?
                LocalDate.parse(s, DateTimeFormatter.ofPattern(PROBABLY_FORMAT_STRING)) : null;
    }

    /**
     * 字符串格式化为日期,字符串必须符合 "yyyy-MM-dd HH:mm:ss" 格式
     * 不支持 24:00:00 格式,需要转换为 00:00:00
     *
     * @param s 将要 LocalDateTime 化的字符串
     * @return LocalDateTime
     */
    public static LocalDateTime stringToLocalDateTime(String s) {
        return stringNotNull(s) && Pattern.matches(PROBABLY_REGEX + " " + DETAIL_REGEX, s) ?
                LocalDateTime.parse(s, DateTimeFormatter.ofPattern(DETAIL_FORMAT_STRING)) : null;
    }

    private static boolean stringNotNull(String s) {
        return null != s && s.length() > 0 && !"NULL".equals(s) && !"null".equals(s) && !"''".equals(s) && !"\"\"".equals(s);
    }
}

 

由于本人水平有限,难免会出现错误,欢迎指正.

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值