LocalDateTime与DateTimeFormatter,毫秒值,时间和文本转换


        /*=== 毫秒值与时间互相转换 ===*/
        /*
         * 毫秒值>>时间
         * 思路:先转换成Instant,再加上时区(ZoneOffset也可以)转换成LocalDateTime
         * 思路:使用LocalDateTime.ofEpochSecond 传入秒,和纳秒值
         */
        long milli = 1555666999123L;//首先来一个long毫秒值,也可使用System.currentTimeMillis()
        LocalDateTime time1 = LocalDateTime.ofInstant(Instant.ofEpochMilli(milli), ZoneId.systemDefault());
        LocalDateTime time2 = LocalDateTime.ofEpochSecond(milli / 1000, (int)(milli % 1000 * 1000_000), ZoneOffset.ofHours(8));
        System.out.println("毫秒值转换时间方式一:" + time1);//2019-04-19T17:43:19.123
        System.out.println("毫秒值转换时间方式二:" + time2);//2019-04-19T17:43:19.123
        System.out.println("两种方式结果是否一致:" + time1.equals(time2));//true
        /*
         * 时间>>毫秒值
         * 思路:先根据当前时间的时区转换成Instant,再使用Instant对象的toEpochMilli方法
         * 思路:使用toEpochSecond(ZoneOffset)和getNano()分别获得秒(整数部分,不足一秒的舍弃)和纳秒,再统一单位到毫秒进行相加
         */
        LocalDateTime time = LocalDateTime.of(2019, 4, 19, 17, 43, 19, 123 * 1000_000);//首先有一个时间对象,2019-04-19T17:43:19.123
        long milli1 = time.toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
        long milli2 = time.toEpochSecond(ZoneOffset.ofHours(8)) * 1000 + time.getNano() / 1000_000;
        System.out.println("时间转换毫秒值方式一:" + milli1);
        System.out.println("时间转换毫秒值方式二:" + milli2);
        
        /*=== 文本与时间互相转换 ===*/
        //文本与时间转换需要一个模板和一个 DateTimeFormatter
        String pattern = "自定义文本''yyyy-MM-dd HH:mm:ss.SSS''";
        DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern(pattern);
        //java8版本在pattern带毫秒的解析中异常问题可使用DateTimeFormatterBuilder的appendPattern和appendValue方式进行构建(未验证)
        /*DateTimeFormatter timeFormatter = new DateTimeFormatterBuilder()
                        .appendPattern("自定义文本''yyyy-MM-dd HH:mm:ss.")
                        .appendValue(ChronoField.MILLI_OF_SECOND)
                        .appendPattern("''").toFormatter();*/
        /*
         * 文本>>时间
         * 思路:直接使用LocalDateTime.parse方法,传入文本和一个DateTimeFormatter实例
         * 思路:使用DateTimeFormatter对象的parse方法解析出一个TemporalAccessor对象,再最为LocalDateTime.from的参数
         */
        String text = "自定义文本'2019-04-19 17:43:19.123'";//假设有这样一个文本,需要转换为时间
        LocalDateTime localDateTime1 = LocalDateTime.parse(text, timeFormatter);
        LocalDateTime localDateTime2 = LocalDateTime.from(timeFormatter.parse(text));
        System.out.println(localDateTime1);//2019-04-19T17:43:19.123
        System.out.println(localDateTime2);//2019-04-19T17:43:19.123
        System.out.println(localDateTime1.equals(localDateTime2));//true
        
        /*
         * 时间>>文本
         * 思路:DateTimeFormatter和LocalDateTime都可以作为主调,另一个则最为参数
         */
        LocalDateTime localDateTime = LocalDateTime.of(2019, 4, 19, 17, 43, 19, 123 * 1000_000);//假设有这样一个时间对象,2019-04-19T17:43:19.123 需要转换为文本
        System.out.println("时间转换为自定义文本:" + timeFormatter.format(localDateTime));
        System.out.println("时间转换为自定义文本:" + localDateTime.format(timeFormatter));
        
        /*=== 文本转换为毫秒值 ===*/
        /*
         * 文本=>时间=>毫秒值
         * 参考以上
         */
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值