java中时间的转换相关问题整理

这篇博客整理了Java中关于时间转换的各种情况,包括String格式时间转Date, LocalDateTime, LocalDate, LocalTime,时间戳转日期类,日期类转String,以及它们之间的相互转换。提供了完整的转换案例代码。" 123786943,11372100,ITSS认证流程详解及费用,"['系统集成', '资质认证', 'IT服务管理', '企业认证', '信息技术']

前言

Java中时间转换主要是以下几种情形

  • String格式时间转换为Date,LocalDateTime,LocalDate,LocalTime

  • 时间戳转换为Date,LocalDateTime,LocalDate,LocalTime

  • Date,LocalDateTime,LocalDate,LocalTime转换为String格式时间

  • Date,LocalDateTime,LocalDate转换为时间戳

  • Date,LocalDateTime,LocalDate,LocalTime之间的相互转换

具体的转换详细情况如下:

String格式时间转换为Date,LocalDateTime,LocalDate,LocalTime

 /**
         * ----------------------------------------------String转各种时间开始------------------------------------------------------------------
         */
        String source2 = "2022-03-23 12:45:35";
        // String转各种时间
​
        // 匹配规则写法
        DateTimeFormatter localDateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        DateTimeFormatter localDateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        DateTimeFormatter localDateFormatter_short = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        DateTimeFormatter localTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        DateTimeFormatter localTimeFormatter_short = DateTimeFormatter.ofPattern("HH:mm:ss");
​
        LocalDateTime localDateTime3 = LocalDateTime.parse("2022-03-23 12:45:35", localDateTimeFormatter);
        System.out.println("String格式时间转换为LocalDateTime: "+localDateTime3);
​
        /**
         * String-->LocalDate
         * String-->LocalTime
         *  LocalDate和LocalTime分别没有时分秒和年月日,当长公式匹配是自动舍弃对应的时分秒或年月日
         *  字符串是长格式yyyy-MM-dd HH:mm:ss,匹配规则也该是yyyy-MM-dd HH:mm:ss
         *  字符串是短格式yyyy-MM-dd,匹配规则也该是yyyy-MM-dd
         */
        // String-->LocalDate
        // 字符串是长格式yyyy-MM-dd HH:mm:ss,匹配规则也该是yyyy-MM-dd HH:mm:ss
        LocalDate localDate2 = LocalDate.parse("2022-03-23 12:45:35", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        System.out.println("String格式时间转换为LocalDate: yyyy-MM-dd HH:mm:ss--> "+localDate2);
        // 字符串是短格式yyyy-MM-dd,匹配规则也该是yyyy-MM-dd
        LocalDate localDate_short = LocalDate.parse("2022-03-23", DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        System.out.println("String格式时间转换为LocalDate: yyyy-MM-dd --> "+localDate_short);
​
        // String-->LocalTime
        // 字符串是短格式yyyy-MM-dd,匹配规则也该是yyyy-MM-dd
        LocalTime localTime1 = LocalTime.parse("2022-03-23 12:45:35", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        System.out.println("String格式时间转换为LocalTime: yyyy-MM-dd HH:mm:ss -->  "+localTime1);
        // 字符串是短格式yyyy-MM-dd,匹配规则也该是yyyy-MM-dd
        LocalTime localTime_short = LocalTime.parse("12:45:35", DateTimeFormatter.ofPattern("HH:mm:ss"));
        System.out.println("String格式时间转换为LocalTime: HH:mm:ss --> "+localTime_short);
​
        /**
         * String-->Date
         * 方式一:用SimpleDateFormat的parse,需要处理异常,老式写法,不推荐
         * // 方式二:用Date的from方法,推荐此写法
         */
        // String-->Date
        // 方式一:用SimpleDateFormat的parse,需要处理异常
//        SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//        Date parse1 = simpleDateFormat.parse("2022-03-23 12:45:35");
//        System.out.println("String格式时间转换为Date: "+parse1);
​
        // 方式二:用Date的from方法,推荐此写法
        Date from1 = Date.from(LocalDateTime.parse("2022-03-23 12:45:35", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")).toInstant(ZoneOffset.of("+8")));
        System.out.println("String格式时间转换为Date: 用Date的from方法 "+from1);
​
        /**
         * ----------------------------------------------String转各种时间结束------------------------------------------------------------------
         */

时间戳转换为Date,LocalDateTime,LocalDate,LocalTime

/**
 * ----------------------------------------------long转时间类开始------------------------------------------------------------------
 */
// 1648344941916<--->"2022/3/27 09:35:41"
long currentTimeTimestamp = Long.parseLong("1648344941916");
​
// long--->Date
Date date = new Date(currentTimeTimestamp);
System.out.println("long转换为Date: "+date);
// long-->LocalDateTime
// 毫秒级转换
LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(currentTimeTimestamp), ZoneId.of("+8"));
System.out.println("long转换为LocalDateTime: "+localDateTime);
// long-->LocalDate
LocalDate localDate = LocalDateTime.ofInstant(Instant.ofEpochMilli(currentTimeTimestamp), ZoneId.of("+8")).toLocalDate();
System.out.println("long转换为LocalDate: "+localDate);
// long-->LocalTime
LocalTime localTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(currentTimeTimestamp), ZoneId.of("+8")).toLocalTime();
System.out.println("long转换为LocalTime: "+localTime);
​
/**
 * ----------------------------------------------long转时间类结束------------------------------------------------------------------
 */

Date,LocalDateTime,LocalDate,LocalTime转换为String格式时间

/**
 * ----------------------------------------------时间类转String开始------------------------------------------------------------------
 */
// 准别一个LocalTime,14:23:58:234
LocalTime localTime2=LocalTime.of(14,23,58,234);
// 2022-12-12 00:00:00
LocalDate localDate1=LocalDate.of(2022,12,12);
// 2022-12-12 12:13:23:355
LocalDateTime localDateTime1=LocalDateTime.of(2022,12,12,12,13,23);
// 当前时间
Date date1=new Date();
// LocalTime-->String
String format1 = localTime2.format(DateTimeFormatter.ofPattern("HH:mm:ss:SSS"));
System.out.println("14:23:58的LocalTime转换成字符串后是:" + format1);
// LocalDate-->String
String format = localDate1.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
System.out.println("LocalDate转String结果:"+format);
// LocalDateTime-->String
String format2 = localDateTime1.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSS"));
System.out.println("LocalDateTime转String结果:"+format2);
// Date-->String
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
String format3 = simpleDateFormat.format(date1);
System.out.println("Date转String结果:"+format3);
​
/**
 * ----------------------------------------------时间类转String结束------------------------------------------------------------------
 */

Date,LocalDateTime,LocalDate转换为时间戳

/**
 * LocalTime无法转为时间戳
 */
// 2022-12-12 00:00:00
LocalDate localDate3 = LocalDate.of(2022, 12, 12);
// 2022-12-12 12:13:23:355
LocalDateTime localDateTime4 = LocalDateTime.of(2022, 12, 12, 12, 13, 23);
// 准备一个时间
long currentTimeTimestamp2 = Long.parseLong("1648344941916");
​
// long--->Date
Date date2 = new Date(currentTimeTimestamp2);
System.out.println("1648344941916:long转换为Date: " + date);//'2022/3/27 09:35:41'
​
​
// LocalDate-->时间戳long
long timestamp_localDate = localDate3.atStartOfDay().toInstant(ZoneOffset.of("+8")).toEpochMilli();
System.out.println("LocalDate转时间戳long结果:" + timestamp_localDate);
// LocalDateTime-->时间戳long
long timestamp_localDateTime = localDateTime4.toInstant(ZoneOffset.of("+8")).toEpochMilli();
System.out.println("LocalDateTime转时间戳long结果:" + timestamp_localDateTime);
// Date-->时间戳long
long timestamp_Date = date2.toInstant().toEpochMilli();
System.out.println("Date转时间戳long结果:" + timestamp_Date);
​
​
/**
 * ----------------------------------------------时间类转时间戳结束------------------------------------------------------------------
 */

Date,LocalDateTime,LocalDate,LocalTime之间的相互转换

参考:LocalDateTime、LocalDate、Date的相互转换

   /**
         * LocalDateTime可以通过toLocalDate()方法和toLocalTime()方法分别得到LocalDate与LocalTIme
         */
        // 准备LocalDateTIme 2022-12-12 12:13:23:355
        LocalDateTime localDateTime5 = LocalDateTime.of(2022, 12, 12, 12, 13, 23);
        System.out.println("准备LocalDateTIme:"+localDateTime5);
​
        //LocalDateTime-->LocalTime
        LocalTime localTime3 = localDateTime5.toLocalTime();
        System.out.println("LocalDateTime-->LocalTime: "+localTime3);
        //LocalDateTime-->LocalDate
        LocalDate localDate4 = localDateTime5.toLocalDate();
        System.out.println("LocalDateTime-->LocalDate: "+localDate4);
        // LocalDate-->LocalDateTime
        LocalDateTime localDateTime2 = localDate4.atStartOfDay();
       // 可通过localDate4.atTime()进一步设置时间
​
        System.out.println("LocalDate-->LocalDateTime: "+localDateTime2);
​
        // LocalDateTime-->Date
        ZoneId zoneId=ZoneId.systemDefault();
//        方式一:
//        ZonedDateTime zonedDateTime=localDateTime5.atZone(zoneId);
//        Date from = Date.from(zonedDateTime.toInstant());
        // 方式二:
        Date from = Date.from(localDateTime5.toInstant(ZoneOffset.of("+8")));
        System.out.println("LocalDateTime-->Date: "+from);
​
​
        //LocalDate-->Date,先调用 atStartOfDay() 方法转 LocalDateTime 再转 Date
        LocalDate localDate9 = LocalDate.now();
        System.out.println("准备的LocalDate是:"+localDate9);
        Date from2 = Date.from(localDate9.atStartOfDay().toInstant(ZoneOffset.of("+8")));
        System.out.println("LocalDate-->Date: "+from2);
​
        // Date-->LocalDateTime
        Date date3= new Date();
//        Instant instant = date3.toInstant();
//        LocalDateTime localDateTime6 = instant.atZone(ZoneId.of("+8")).toLocalDateTime();
        LocalDateTime localDateTime7 = date3.toInstant().atZone(ZoneId.of("+8")).toLocalDateTime();
        System.out.println("Date-->LocalDateTime:"+localDateTime7);
​
        // Date-->LocalDate
​
        LocalDate localDate5 = date3.toInstant().atZone(ZoneId.of("+8")).toLocalDate();
        System.out.println("Date-->LocalDate:"+localDate5);
​
​
​
        /**
         * ----------------------------------------------Date,LocalDateTime,LocalDate,LocalTime之间的相互转换开始------------------------------------------------------------------
         */

时间转换完整案例代码:

/**
* 
* @Description 测试时间转换
* @Author moyongjun
* @Date 2022-03-27 12:38:21
* @Version 1.0
* 
**/
public class TestLocalDateTimeConvert {
​
    @Test
    public void test() {
​
        /**
         * ----------------------------------------------long转时间类开始------------------------------------------------------------------
         */
        // 1648344941916<--->"2022/3/27 09:35:41"
        long currentTimeTimestamp = Long.parseLong("1648344941916");
​
        // long--->Date
        Date date = new Date(currentTimeTimestamp);
        System.out.println("long转换为Date: " + date);
        // long-->LocalDateTime
        // 毫秒级转换
        LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(currentTimeTimestamp), ZoneId.of("+8"));
        System.out.println("long转换为LocalDateTime: " + localDateTime);
        // long-->LocalDate
        LocalDate localDate = LocalDateTime.ofInstant(Instant.ofEpochMilli(currentTimeTimestamp), ZoneId.of("+8")).toLocalDate();
        System.out.println("long转换为LocalDate: " + localDate);
        // long-->LocalTime
        LocalTime localTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(currentTimeTimestamp), ZoneId.of("+8")).toLocalTime();
        System.out.println("long转换为LocalTime: " + localTime);
​
        /**
         * ----------------------------------------------long转时间类结束------------------------------------------------------------------
         */
​
        /**
         * ----------------------------------------------String转各种时间开始------------------------------------------------------------------
         */
        String source2 = "2022-03-23 12:45:35";
        // String转各种时间
​
        // 匹配规则写法
        DateTimeFormatter localDateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        DateTimeFormatter localDateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        DateTimeFormatter localDateFormatter_short = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        DateTimeFormatter localTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        DateTimeFormatter localTimeFormatter_short = DateTimeFormatter.ofPattern("HH:mm:ss");
​
        LocalDateTime localDateTime3 = LocalDateTime.parse("2022-03-23 12:45:35", localDateTimeFormatter);
        System.out.println("String格式时间转换为LocalDateTime: " + localDateTime3);
​
        /**
         * String-->LocalDate
         * String-->LocalTime
         *  LocalDate和LocalTime分别没有时分秒和年月日,当长公式匹配是自动舍弃对应的时分秒或年月日
         *  字符串是长格式yyyy-MM-dd HH:mm:ss,匹配规则也该是yyyy-MM-dd HH:mm:ss
         *  字符串是短格式yyyy-MM-dd,匹配规则也该是yyyy-MM-dd
         */
        // String-->LocalDate
        // 字符串是长格式yyyy-MM-dd HH:mm:ss,匹配规则也该是yyyy-MM-dd HH:mm:ss
        LocalDate localDate2 = LocalDate.parse("2022-03-23 12:45:35", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        System.out.println("String格式时间转换为LocalDate: yyyy-MM-dd HH:mm:ss--> " + localDate2);
        // 字符串是短格式yyyy-MM-dd,匹配规则也该是yyyy-MM-dd
        LocalDate localDate_short = LocalDate.parse("2022-03-23", DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        System.out.println("String格式时间转换为LocalDate: yyyy-MM-dd --> " + localDate_short);
​
        // String-->LocalTime
        // 字符串是短格式yyyy-MM-dd,匹配规则也该是yyyy-MM-dd
        LocalTime localTime1 = LocalTime.parse("2022-03-23 12:45:35", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        System.out.println("String格式时间转换为LocalTime: yyyy-MM-dd HH:mm:ss -->  " + localTime1);
        // 字符串是短格式yyyy-MM-dd,匹配规则也该是yyyy-MM-dd
        LocalTime localTime_short = LocalTime.parse("12:45:35", DateTimeFormatter.ofPattern("HH:mm:ss"));
        System.out.println("String格式时间转换为LocalTime: HH:mm:ss --> " + localTime_short);
​
        /**
         * String-->Date
         * 方式一:用SimpleDateFormat的parse,需要处理异常,老式写法,不推荐
         * // 方式二:用Date的from方法,推荐此写法
         */
        // String-->Date
        // 方式一:用SimpleDateFormat的parse,需要处理异常
//        SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//        Date parse1 = simpleDateFormat.parse("2022-03-23 12:45:35");
//        System.out.println("String格式时间转换为Date: "+parse1);
​
        // 方式二:用Date的from方法,推荐此写法
        Date from1 = Date.from(LocalDateTime.parse("2022-03-23 12:45:35", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")).toInstant(ZoneOffset.of("+8")));
        System.out.println("String格式时间转换为Date: 用Date的from方法 " + from1);
​
        /**
         * ----------------------------------------------String转各种时间结束------------------------------------------------------------------
         */
​
​
        /**
         * ----------------------------------------------时间类转String开始------------------------------------------------------------------
         */
        // 准别一个LocalTime,14:23:58:234
        LocalTime localTime2 = LocalTime.of(14, 23, 58, 234);
        // 2022-12-12 00:00:00
        LocalDate localDate1 = LocalDate.of(2022, 12, 12);
        // 2022-12-12 12:13:23:355
        LocalDateTime localDateTime1 = LocalDateTime.of(2022, 12, 12, 12, 13, 23);
        // 当前时间
        Date date1 = new Date();
        // LocalTime-->String
        String format1 = localTime2.format(DateTimeFormatter.ofPattern("HH:mm:ss:SSS"));
        System.out.println("14:23:58的LocalTime转换成字符串后是:" + format1);
        // LocalDate-->String
        String format = localDate1.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        System.out.println("LocalDate转String结果:" + format);
        // LocalDateTime-->String
        String format2 = localDateTime1.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSS"));
        System.out.println("LocalDateTime转String结果:" + format2);
        // Date-->String
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
        String format3 = simpleDateFormat.format(date1);
        System.out.println("Date转String结果:" + format3);
​
        /**
         * ----------------------------------------------时间类转String结束------------------------------------------------------------------
         */
​
        /**
         * ----------------------------------------------时间类转时间戳开始------------------------------------------------------------------
         */
​
        /**
         * LocalTime无法转为时间戳
         */
        // 2022-12-12 00:00:00
        LocalDate localDate3 = LocalDate.of(2022, 12, 12);
        // 2022-12-12 12:13:23:355
        LocalDateTime localDateTime4 = LocalDateTime.of(2022, 12, 12, 12, 13, 23);
        // 准备一个时间
        long currentTimeTimestamp2 = Long.parseLong("1648344941916");
​
        // long--->Date
        Date date2 = new Date(currentTimeTimestamp2);
        System.out.println("1648344941916:long转换为Date: " + date);//'2022/3/27 09:35:41'
​
​
        // LocalDate-->时间戳long
        long timestamp_localDate = localDate3.atStartOfDay().toInstant(ZoneOffset.of("+8")).toEpochMilli();
        System.out.println("LocalDate转时间戳long结果:" + timestamp_localDate);
        // LocalDateTime-->时间戳long
        long timestamp_localDateTime = localDateTime4.toInstant(ZoneOffset.of("+8")).toEpochMilli();
        System.out.println("LocalDateTime转时间戳long结果:" + timestamp_localDateTime);
        // Date-->时间戳long
        long timestamp_Date = date2.toInstant().toEpochMilli();
        System.out.println("Date转时间戳long结果:" + timestamp_Date);
​
​
        /**
         * ----------------------------------------------时间类转时间戳结束------------------------------------------------------------------
         */
​
        /**
         * ----------------------------------------------Date,LocalDateTime,LocalDate,LocalTime之间的相互转换开始------------------------------------------------------------------
         */
​
        /**
         * LocalDateTime可以通过toLocalDate()方法和toLocalTime()方法分别得到LocalDate与LocalTIme
         */
        // 准备LocalDateTIme 2022-12-12 12:13:23:355
        LocalDateTime localDateTime5 = LocalDateTime.of(2022, 12, 12, 12, 13, 23);
        System.out.println("准备LocalDateTIme:"+localDateTime5);
​
        //LocalDateTime-->LocalTime
        LocalTime localTime3 = localDateTime5.toLocalTime();
        System.out.println("LocalDateTime-->LocalTime: "+localTime3);
        //LocalDateTime-->LocalDate
        LocalDate localDate4 = localDateTime5.toLocalDate();
        System.out.println("LocalDateTime-->LocalDate: "+localDate4);
        // LocalDate-->LocalDateTime
        LocalDateTime localDateTime2 = localDate4.atStartOfDay();
       // 可通过localDate4.atTime()进一步设置时间
​
        System.out.println("LocalDate-->LocalDateTime: "+localDateTime2);
​
        // LocalDateTime-->Date
        ZoneId zoneId=ZoneId.systemDefault();
//        方式一:
//        ZonedDateTime zonedDateTime=localDateTime5.atZone(zoneId);
//        Date from = Date.from(zonedDateTime.toInstant());
        // 方式二:
        Date from = Date.from(localDateTime5.toInstant(ZoneOffset.of("+8")));
        System.out.println("LocalDateTime-->Date: "+from);
​
​
        //LocalDate-->Date,先调用 atStartOfDay() 方法转 LocalDateTime 再转 Date
        LocalDate localDate9 = LocalDate.now();
        System.out.println("准备的LocalDate是:"+localDate9);
        Date from2 = Date.from(localDate9.atStartOfDay().toInstant(ZoneOffset.of("+8")));
        System.out.println("LocalDate-->Date: "+from2);
​
        // Date-->LocalDateTime
        Date date3= new Date();
//        Instant instant = date3.toInstant();
//        LocalDateTime localDateTime6 = instant.atZone(ZoneId.of("+8")).toLocalDateTime();
        LocalDateTime localDateTime7 = date3.toInstant().atZone(ZoneId.of("+8")).toLocalDateTime();
        System.out.println("Date-->LocalDateTime:"+localDateTime7);
​
        // Date-->LocalDate
​
        LocalDate localDate5 = date3.toInstant().atZone(ZoneId.of("+8")).toLocalDate();
        System.out.println("Date-->LocalDate:"+localDate5);
​
​
​
        /**
         * ----------------------------------------------Date,LocalDateTime,LocalDate,LocalTime之间的相互转换开始------------------------------------------------------------------
         */
​
    }
​
​
}

End.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值