Java日期时间格式转换

1.不同格式日期相互转换方法

public class TestDateConvertUtil {

    public static void main(String[] args) throws ParseException {
        // 获取当前时间
        Date date = new Date(); // 获取当前时间
        long timestamp = System.currentTimeMillis(); // 获取当前时间戳

        // 日期格式转换
        date2String(); // 日期转字符串
        string2Date(); // 字符串转日期
        date2Timestamp(); // 日期转时间戳
        timestamp2Date(); // 时间戳转日期
        cst2Date(); // CST格式转日期
        nonstandard2Date(); // 非标准格式转日期
        convertDateStr(); // 日期字符串格式转换
        date2Calendar(); // 日期转日历
        calendar2Date(); // 日历转日期
    }

    public static void date2String() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = new Date();
        String dateStr = sdf.format(date);
        System.out.println(dateStr);
    }

    public static void string2Date() throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateStr = "2018-05-16 19:30:20";
        Date date = sdf.parse(dateStr);
        System.out.println(date);
    }

    public static void date2Timestamp() {
        Date date = new Date();
        String timestamp = String.valueOf(date.getTime());
        System.out.println(timestamp);
    }

    public static void timestamp2Date() {
        String timestamp = "1526470220000";
        Date date = new Date(new Long(timestamp));
        System.out.println(date);
    }

    public static void cst2Date() throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", java.util.Locale.US); // 注意使用Locale.US参数
        String cst = "Tue May 16 19:30:20 CST 2018";
        Date date = sdf.parse(cst);
        System.out.println(date);
    }

    public static void nonstandard2Date() throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        sdf.setLenient(false); // 设置严格验证日期
        String dateStr = "20180516";
        Date date = sdf.parse(dateStr);
        System.out.println(date);
    }

    public static void convertDateStr() throws ParseException {
        SimpleDateFormat sdfSource = new SimpleDateFormat("yyyyMMdd");
        SimpleDateFormat sdfTarget = new SimpleDateFormat("yyyy-MM-dd");
        String dateSource = "20180516";
        String dateTarget = sdfTarget.format(sdfSource.parse(dateSource));
        System.out.println(dateTarget);
    }

    public static void date2Calendar() {
        Date date = new Date();
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        System.out.println(c);
    }

    public static void calendar2Date() {
        Calendar c = Calendar.getInstance();
        Date date = c.getTime();
        System.out.println(date);
    }
}

2.日期计算方法

public class TestDateCalculateUtil {

    public static void main(String[] args) throws ParseException {
        // 日期计算.例子:2018-05-16 19:30:20
        DateUtils.setYears(new Date(), 2019); // 根据参数设置日期年份.输出:2019-05-16 19:30:20
        DateUtils.addMonths(new Date(), -1); // 根据参数增加日期月份.输出:2019-04-16 19:30:20
        DateUtils.truncate(new Date(), Calendar.DATE); // 根据参数截取日期.输出:2019-04-16 00:00:00
        DateUtils.ceiling(new Date(), Calendar.DATE);  // 根据参数向上进位日期.输出:2018-05-17 00:00:00
        DateUtils.getFragmentInDays(new Date(), Calendar.MONTH); // 根据参数截取范围内日期后返回天数.输出:16
        DateUtils.truncatedEquals(new Date(), new Date(), Calendar.DATE); //根据参数范围比较日期是否相同,该例子只比较年月日.输出:true
        DateUtils.truncatedCompareTo(new Date(), new Date(), Calendar.MONTH); //根据参数范围比较日期大小,该例子只比较年月.输出:0

        // 举例
        getFirstSecondOfMonth(); // 获取当月第一秒
        getLastSecondOfMonth(); // 获取当月最后一秒
        getDayOfYear(); // 获取日期是该年的第几天
        getFirstSundayOfMonth(); // 获取当月的第一个周日
    }

    public static void getFirstSecondOfMonth() {
        Date date = new Date();
        date = DateUtils.truncate(date, Calendar.MONTH); // 截取日期到月份
        System.out.println(date); // 输出:2018-05-01 00:00:00
    }

    public static void getLastSecondOfMonth() {
        Date date = new Date();
        date = DateUtils.ceiling(date, Calendar.MONTH); // 向上进位月份
        date = DateUtils.addSeconds(date, -1); // 减1秒
        System.out.println(date); // 输出:2018-05-31 23:59:59
    }

    public static void getDayOfYear() {
        Date date = new Date();
        long day = DateUtils.getFragmentInDays(date, Calendar.YEAR); // 截取年之后的日期部分,并按天数返回
        System.out.println(day); // 输出:136
    }

    public static void getFirstSundayOfMonth() {
        Date date = new Date();
        date = DateUtils.setDays(date, 1); // 从该月第一天开始
        while (true) {
            Calendar c = Calendar.getInstance();
            c.setTime(date);
            if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { // 比较该天是否为周日
                System.out.println(date); // 输出:2018-05-06 19:30:20
                break;
            } else {
                date = DateUtils.addDays(date, 1);
            }
        }
    }
}

3.计算日期间隔的方法

public static void main(String[] args) {
        // 两个日期之间实际的间隔,并按规定格式返回,如:2018.8.31与2018.9.4 相差5天
        String period = DurationFormatUtils.formatPeriod(DateUtils.addDays(new Date(), -5).getTime(), new Date().getTime(), "y-M-d");
        System.out.println(period); // 相差5天,输出:0-0-5

        // 计算两个月之间的间隔,跨月即算间隔1个月,如:2018.8.31与2018.9.4 相差1个月
        int periodOfMonth = getPeriodOfMonth(DateUtils.addDays(new Date(), -5), new Date());
        System.out.println(periodOfMonth); // 相差1个月,输出:1
    }

    public static int getPeriodOfMonth(Date dateBegin, Date dateEnd) {
        Date begin = DateUtils.truncate(dateBegin, Calendar.MONTH);
        Date end = DateUtils.truncate(dateEnd, Calendar.MONTH);
        String period = DurationFormatUtils.formatPeriod(begin.getTime(), end.getTime(), "M");
        return Integer.parseInt(period);
    }

摘自日期转换和计算:
https://www.cnblogs.com/pcheng/p/9047583.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值