日期类相关转换

    在日常项目中经常会碰到日期与字符串之间的相互转换,有很多工具包都提供了相关的功能,如commons-lang3.jar,该包中提供了DateUtils、DateFormatUtils2个类来实现,是线程安全的,还有org.joda.time等架包。在Java8当中又新增了一个包java.time,其中包含了LocalDate、LocalTime、LocalDateTime分别应用于不同的场景,并且都是线程安全的,该包中提供了很多非常实用的方法,比如:plusDays()、plusMonths()等,有了这些方法之后我们就无需考虑跨年跨月的问题了。

    可以在这些工具包的基础上再提供一个工具类,用来处理各种类型之间的转换:

package date;

import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;

import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;

/**
 * java.util.Date、String、java.time.LocalDate之间的相互转换(日期,不考虑时分秒)
 */
public class ConvertUtil {
    
    private static final String NORMAL_DATE_PATTERN = "yyyy-MM-dd";

    /**
     * String --> Date
     */
    public static Date stringToDate(String dateStr) throws Exception{
        return DateUtils.parseDate(dateStr, NORMAL_DATE_PATTERN);
    }
    /**
     * Date --> String
     */
    public static String dateToString(Date date){
        return DateFormatUtils.format(date, NORMAL_DATE_PATTERN);
    }
    
    /**
     * String --> LocalDate
     */
    public static LocalDate stringToLocalDate(String dateStr){
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern(NORMAL_DATE_PATTERN);
        return LocalDate.parse(dateStr, dtf);
    }
    /**
     * LocalDate --> String
     */
    public static String localDateToString(LocalDate localDate){
        return localDate.toString(); //默认格式为yyyy-MM-dd
    }
    
    /**
     * Date --> LocalDate
     * 方法一、Date类型不能直接转换成LocalDate,只能转换成LocalDateTime,再转成LocalDate,中间利用Instant类
     * 方法二、Date先转成String,再由String转成LocalDate(利用parse方法)
     */
    public static LocalDate dateToLocalDate(Date date){
        Instant instant = date.toInstant();
        ZoneId zone = ZoneId.systemDefault();
        return LocalDateTime.ofInstant(instant, zone).toLocalDate();
    }
    /**
     * LocalDate --> Date
     * 转换方法同上类似
     */
    public static Date localDateToDate(LocalDate localDate){
        ZoneId zone = ZoneId.systemDefault();
        Instant instant = localDate.atStartOfDay(zone).toInstant();
        return Date.from(instant);
    }
    
    
    public static void main(String[] args) {
        System.out.println(ConvertUtil.dateToLocalDate(new Date()).toString());
        
        LocalDate localDate = LocalDate.now();
        System.out.println(ConvertUtil.localDateToDate(localDate));
    }
    
}

 

转载于:https://my.oschina.net/bwaylon/blog/1490626

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值