美文网首页
Java日期时间操作基础——包含JDK1.8时间操作新特性

Java日期时间操作基础——包含JDK1.8时间操作新特性

作者: 卡斯特梅的雨伞 | 来源:发表于2021-12-05 01:07 被阅读0次

    JDK1.7日期时间操作

    时间.png
    日历.png 日历2.png

    示例小结

    public class DateTest {
    
        public static final String FORMAT_DATE = "yyyy-MM-dd";
        public static final String FORMAT = "yyyy-MM-dd HH:mm:ss";
        public static final String FORMAT_MIN = "yyyy-MM-dd HH:mm";
        public static final String FORMAT_MILLISECOND = "yyyy-MM-dd HH:mm:ss.S";
        private static String[] parsePatterns = {"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm",
                "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm"};
    
        /**
         * SimpleDateFormat时间格式化
         */
        @Test
        public void test1() throws ParseException {
            Date date = new Date();
            /**
             *常用格式:
             * yyyy-MM-dd
             * yyyy-MM-dd HH:mm:ss
             *  yyyy-MM-dd HH:mm
             */
            //根据约定好的pattern时间格式进行格式化和解析
            SimpleDateFormat dateFormat = new SimpleDateFormat(FORMAT);
            //格式化
            String dateStr = dateFormat.format(date);
            System.out.println(dateStr);
            //字符串解析成date对象
            Date parseDate = dateFormat.parse(dateStr);
            System.out.println(parseDate);
        }
        /**
         * 2021-12-04 00:49:39
         * Sat Dec 04 00:49:39 CST 2021
         */
    
        /**
         * Calendar(抽象类)日历类的使用
         */
        @Test
        public void test2() {
            //两种创建
    //        Calendar calendar = new GregorianCalendar();
            //默认用getInstance()创建
            Calendar calendar = Calendar.getInstance();
            //get()
            //根据日历类型获取数据
            //当天日历对应的一个月的第几天
            int day = calendar.get(Calendar.DAY_OF_MONTH);
            System.out.println(day);
            //set() 设置日期
            calendar.set(Calendar.DAY_OF_MONTH, 9);
            day = calendar.get(Calendar.DAY_OF_MONTH);
            System.out.println(day);
            //添加天数,负数表示减天数
            calendar.add(Calendar.DAY_OF_MONTH, -1);
            day = calendar.get(Calendar.DAY_OF_MONTH);
            System.out.println(day);
            //getTime() 日历类转Date
            Date date = calendar.getTime();
            System.out.println(date);
            //根据Date日期设置日历
            calendar.setTime(new Date());
            day = calendar.get(Calendar.DAY_OF_MONTH);
            System.out.println(day);
        }
        /**
         * 4
         * 9
         * 8
         * Wed Dec 08 01:55:33 CST 2021
         * 4
         */
    
    }
    

    JDK1.8日期时间操作——重点

    LocalDateTime

    LocalDateTime.png
    LocalDateTime2.png
    LocalDateTime3.png

    示例小结

    public class JDKDateTest {
    
        @Test
        public void test1() {
            //创建日期对象
            //获取当前日期时间 now()
            LocalDate localDate = LocalDate.now();
            LocalTime localTime = LocalTime.now();
            LocalDateTime localDateTime = LocalDateTime.now();
            System.out.println(localDate);
            System.out.println(localTime);
            System.out.println(localDateTime);
    //        2021-12-04
    //        23:44:44.112
    //        2021-12-04T23:44:44.112
            //创建指定日期时间的of()方法
            LocalDateTime dateTime = LocalDateTime.of(2020, 10, 10, 12, 12, 12);
            LocalDate date = LocalDate.of(2020, 10, 10);
            LocalTime time = LocalTime.of(12, 12, 12);
            System.out.println(dateTime);
            System.out.println(date);
            System.out.println(time);
    //        2020-10-10T12:12:12
    //        2020-10-10
    //        12:12:12
            //getXXX方法 获取时间里的年月日的值相关的属性
            int dayOfYear = dateTime.getDayOfYear();
            Month month = dateTime.getMonth();
            int monthValue = dateTime.getMonthValue();
            int dayOfMonth = dateTime.getDayOfMonth();
            System.out.println(dayOfYear);
            System.out.println(month);
            System.out.println(monthValue);
            System.out.println(dayOfMonth);
    //        284
    //        OCTOBER
    //        10
    //        10
            //withXXX() 设置指定的时间相关的属性返回新的日期,原来的日期是不变的
            //LocalDateTime JDK时间不可变性,因此是线程安全的。
            LocalDateTime withDateTime1 = dateTime.with(localDateTime);
            LocalDateTime withDateTime2 = dateTime.withDayOfMonth(11);
            System.out.println("原来日期:"+dateTime);
            System.out.println("修改后日期1:"+withDateTime1);
            System.out.println("修改后日期2:"+withDateTime2);
            System.out.println("-----------------------------------");
    //        原来日期:2020-10-10T12:12:12
    //        修改后日期1:2021-12-04T23:44:44.112
    //        修改后日期2:2020-10-11T12:12:12
            //日期时间的添加删除
            //可以直接添加想要添加的天数或其他属性值,返回的日期时间会自动处理为对应的日期时间
            LocalDateTime plusDateTime = dateTime.plusDays(60);
            LocalDateTime plusDateTime2 = dateTime.plusHours(70);
            //加减时间都可以操作负数,负数对应就是相反的操作,没有问题
            LocalDateTime minusDateTime1 = dateTime.minusDays(-1);
            System.out.println("原来日期:"+dateTime);
            System.out.println(plusDateTime);
            System.out.println(plusDateTime2);
            System.out.println(minusDateTime1);
    //        原来日期:2020-10-10T12:12:12
    //        2020-12-09T12:12:12
    //        2020-10-13T10:12:12
    //        2020-10-11T12:12:12
        }
    }
    

    Instant——瞬时——类似于Date

    Instant.png
    Instant2.png

    示例小结

    public class InstantTest {
    
        @Test
        public void test1() {
            //获取本初子午线对应的当前时间
            Instant instant = Instant.now();
            long timeMillis = System.currentTimeMillis();
            System.out.println(instant);
    //       2021-12-04T16:16:27.593Z
            //添加东八区时间的偏移量
            OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
            System.out.println(offsetDateTime);
    //        2021-12-05T00:16:27.593+08:00
            //获取19701-1-1 00:00:00到现在的毫秒数,类似于System.currentTimeMillis()
            long epochMilli = instant.toEpochMilli();
            System.out.println("toEpochMilli "+epochMilli);
            System.out.println("currentTimeMillis "+timeMillis);
    //        toEpochMilli 1638634587593
    //        currentTimeMillis 1638634587593
            //根据时间戳获取Instant示例,类似于Date(long date)
            Instant instant1 = Instant.ofEpochMilli(epochMilli);
            System.out.println(instant1);
    //        2021-12-04T16:16:27.593Z
        }
    }
    

    DateTimeFormatter——格式化解析

    时间格式化注意

    yyyy-MM-dd HH:mm:ss HH表示24小时时间制
    yyyy-MM-dd hh:mm:ss HH表示12小时时间制
    

    代码示例

        @Test
        public void test2(){
            LocalDateTime now = LocalDateTime.now();
            //自定义格式化类型ofPattern()
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
            //格式化
            String nowStr = formatter.format(now);
            System.out.println(nowStr);
            //2021-12-05 00:49:37
            //解析
            LocalDateTime dateTime = LocalDateTime.parse(nowStr, formatter);
            System.out.println(dateTime);
            //2021-12-05T00:49:37
            TemporalAccessor parse1 = formatter.parse(nowStr);
            System.out.println(parse1);
    //        {},ISO resolved to 2021-12-05T00:49:37
            //强转报错,要使用LocalDateTime.parse(nowStr, formatter);
            //java.lang.ClassCastException: java.time.format.Parsed cannot be cast to java.time.LocalDateTime
    //        LocalDateTime parse2 = (LocalDateTime) formatter.parse(nowStr);
    //        System.out.println(parse2);
        }
    
    image.png image.png
    image.png
    image.png

    其他

    UTC 和 GMT的区别是什么啊?

    GMT(Greenwish Mean Time 格林威治平时),这是UTC的民间名称。GMT=UTC

    没有区别。

    参考

    Java入门视频教程

    480-488

    相关文章

      网友评论

          本文标题:Java日期时间操作基础——包含JDK1.8时间操作新特性

          本文链接:https://www.haomeiwen.com/subject/otcixrtx.html