美文网首页Java学习
Java8 日期时间操作

Java8 日期时间操作

作者: xiaogp | 来源:发表于2020-07-17 14:21 被阅读0次

操作包括

  1. java.util.Date().getTime()返回13位时间戳
  2. System.currentTimeMillis 计算毫秒差
  3. SimpleDateFormat 解析和格式化日期
  4. LocalDate
  5. LocalTime
  6. LocalDateTime
  7. Duration
  8. Period
  9. 计算日间隔 toEpochDay
  10. 日期相互加减
  11. 日期时间和日期相互转换
  12. 时间类型和时间戳互相转化

java.util.Date().getTime()

返回13位时间戳

        long a = new java.util.Date().getTime();
        System.out.println(a);  // 1602243261784

System.currentTimeMillis

常用来计时, 单位是毫秒

// 使用 System.currentTimeMillis
    // 主要用来计算时间差
    public static void getDiffTime() {
        try {
            long start = System.currentTimeMillis();
            Thread.sleep(1000);
            long end = System.currentTimeMillis();
            System.out.println(end - start);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

SimpleDateFormat

常用来解析和格式化日期

// SimpleDateFormat 常用来输出标准格式日期
    // yyyy-MM-dd HH:mm:ss
    public static void getFormatDate() {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        System.out.println(simpleDateFormat.format(new Date()));
    }

    public static void getParseDate() {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date date = simpleDateFormat.parse("2020-02-02");
            System.out.println(date);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

LocalDate

获得日期类型的时间, 并且获得年月日

// LocalDate 获得当前日期, 并且获得年. 月, 日
    public static void getNowDate() {
        LocalDate date = LocalDate.now();
        System.out.println(date);
        System.out.println(date.getDayOfMonth());
        System.out.println(date.getMonthValue());
        System.out.println(date.getYear());

        // 可以format
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
        String formatDate = date.format(formatter);
        System.out.println(formatDate);
    }

LocalTime

获得当前的日期时间, 并且获得时,分,秒

// LocalTime, 获得当前的日期时间, 并且获得时,分,秒
    public static void getNowTime() {
        LocalTime time = LocalTime.now();  // 20:13:56.241
        System.out.println(time);
        System.out.println(time.getHour());
        System.out.println(time.getMinute());
        System.out.println(time.getSecond());

        // 可以format
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
        String formatTime = time.format(formatter);
        System.out.println(formatTime);
    }

LocalDateTime

获得当前的日期时间, 并且获得年月日时分秒

// LocalDateTime, 获得当前的日期时间, 并且获得年月日时分秒
    public static void getNowDateTime() {
        LocalDateTime datetime = LocalDateTime.now();
        System.out.println(datetime);
        System.out.println(datetime.getYear());
        System.out.println(datetime.getDayOfMonth());
        System.out.println(datetime.getMonthValue());
        System.out.println(datetime.getHour());
        System.out.println(datetime.getMinute());
        System.out.println(datetime.getSecond());

        // format
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String formatDatetime = datetime.format(dateTimeFormatter);
        System.out.println(formatDatetime);  // 2020-07-17 09:22:54
    }

获得指定时间类型的数据

可以使用parse解析输入的字符串

// 指定日期时间
    public static void getTimeDefine() {
        String time1 = "2020-02-02";
        String time2 = "2020-02-02 15:03";
        String time3 = "16:20:20";
        LocalDate time1Parse = LocalDate.parse(time1);
        System.out.println(time1Parse);
        System.out.println(time1Parse.getDayOfMonth());

        LocalDateTime time2Parse = LocalDateTime.parse(time2, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
        System.out.println(time2Parse);
        System.out.println(time2Parse.getHour());
        System.out.println(time2Parse.getSecond());  // 默认是0
        // 解析之后再格式化输出
        System.out.println(time2Parse.format(DateTimeFormatter.ofPattern("yyyy:MM:dd HH:mm:ss")));

        LocalTime time3Parse = LocalTime.parse(time3);
        System.out.println(time3Parse);
        System.out.println(time3Parse.getHour());
        System.out.println(time3Parse.format(DateTimeFormatter.ofPattern("HH:mm")));
    }

或者使用of方法

public static void getTimeDefine2() {
        LocalDateTime time1 = LocalDateTime.of(2020, 2, 3, 13, 2, 33);
        System.out.println(time1);
        System.out.println(time1.getYear());
        System.out.println(time1.getSecond());

        LocalDate time2 = LocalDate.of(2020, 2, 3);
        System.out.println(time2);
        System.out.println(time2.getDayOfMonth());
        System.out.println(time2.getYear());
    }

Duration

时间区间, 使用秒和纳秒衡量, 只能用DateTime

// 计算日期差
    public static void getDiffDate() {
        // Duration用秒和纳秒衡量时间, 所以只能用LocalDateTime
        LocalDateTime date1 = LocalDateTime.parse("2020-02-02 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        LocalDateTime date2 = LocalDateTime.of(2020, 4, 2, 0, 0, 0);
        Duration duration = Duration.between(date1, date2);
        System.out.println(duration.toString());  // PT-744H
        System.out.println(duration.toDays());  // 后 - 前
        System.out.println(duration.toHours());
        System.out.println(duration.toMillis());
    }

Period

时间区间, 衡量年月日和几天之间的时间值

// 计算日期差Period
    public static void getDiddDate2() {
        // Period
        // 计算间隔多少年月天, 以大单位先开始排, toTotalMonths可以获得总共间隔多少月
        LocalDate date1 = LocalDate.of(2018, 2, 2);
        LocalDate date2 = LocalDate.of(2020, 1, 10);
        Period period = Period.between(date1, date2);
        System.out.println(period.getYears());
        System.out.println(period.getDays());
        System.out.println(period.getMonths());
        System.out.println(period.toTotalMonths());
        System.out.printf("区间间隔%d年%d月%d天\n", period.getYears(), period.getMonths(), period.getDays());
    }

toEpochDay 计算相差多少日

// 计算日期相差多少天
    public static void getDiffDay() {
        LocalDate date1 = LocalDate.of(2020, 2, 3);
        LocalDate date2 = LocalDate.of(2020, 1, 19);
        long date1EpochDay = date1.toEpochDay();  // 返回的是距离1970-01-01的天数
        System.out.println(date1EpochDay);
        long diffDays = date1.toEpochDay() - date2.toEpochDay();
        System.out.println(diffDays);
    }

日期相加减

// 日期相加减
    public static void plusMinDay() {
        LocalDate date1 = LocalDate.of(2020, 2, 3);
        LocalDate date2 = date1.plusDays(3);
        System.out.println(date2);
        LocalDate date3 = date1.plusYears(2);
        System.out.println(date3);
        LocalDate date4 = date1.minusDays(10);
        System.out.println(date4);
        LocalDate date5 = date1.minusDays(-10);
        System.out.println(date5);
    }

时间, 日期, 日期时间之间的互相转化

// time, date, datetime之间互相转化
    public static void dateToTimeStamp() {
        // date => datetime    asTime
        LocalDate date1 = LocalDate.of(2020, 1, 2);
        LocalDateTime time1 = date1.atTime(LocalTime.parse("06:30:20"));
        LocalDateTime time2 = date1.atTime(LocalTime.of(6,30,30));
        System.out.println(time1.toString());
        System.out.println(time2.toString());

        // time => datetime
        LocalTime time6 = LocalTime.of(13, 13, 13);
        LocalDateTime date3 = time6.atDate(LocalDate.parse("2020-02-02"));
        System.out.println(date3);

        // datetime => date / time
        LocalDateTime time3 = LocalDateTime.of(2020, 2, 2, 13, 1, 1);
        LocalDate date2 = time3.toLocalDate();
        System.out.println(date2.toString());
        LocalTime time4 = time3.toLocalTime();
        System.out.println(time4);
    }

时间类型和时间戳互相转化

// 转化为时间戳
    public static void dateTimeToTimestamp() {
        // datetime转时间戳
        LocalDateTime time1 = LocalDateTime.of(2020,2,2,2,2,2);
        long timestrap = time1.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
        System.out.println(timestrap);  // 1580580122000   13位时间戳

        // 时间戳转datetime
        Instant instant = Instant.ofEpochMilli(1580580122000L);
        LocalDateTime time2 = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
        System.out.println(time2.toString());

    }

相关文章

  • Java8新特性系列(原子性操作)

    上期我们介绍了Java8中新的时间日期API,本期我们介绍Java8中原子性操作LongAdder。 原子操作 根...

  • Java8 日期时间操作

    操作包括 java.util.Date().getTime()返回13位时间戳System.currentTime...

  • Java8 日期类相关介绍

    Java8 时间日期类操作 Java8的时间类有两个重要的特性 线程安全 不可变类,返回的都是新的对象显然,该特性...

  • java8 的时间api【原创】

    java8 新的时间api 本篇文章分为三个部分: 基础的日期时间对象的使用 操作和解析日期时间对象 基于时区的调...

  • LocalDateTime用法

    转自:java8 — 新日期时间API篇 前言 最近看别人项目源码,发现Java8新的日期时间API很方便强大,所...

  • Date、LocalDate、LocalTime、LocalDa

    java8全新的日期和时间API LocalDate、LocalTime、LocalDateTime是java8对...

  • 【Java8】Java8实战之时间日期操作

    Java8实战之时间日期操作 前言 前面我们已经基本学习完Java8中应用场景比较广泛的新功能或者说新特性,在本小...

  • Java 8 时间日期库使用示例(二)

    本文翻译:梁开权 在上一个章节中我们使用Java8提供的时间日期库,能更加便捷和灵活的操作时间日期,本章节我们将接...

  • java8-新的日期API

    背景 java的日期和时间API设计不理想,java8引入新的时间和日期API就是为了解决这个问题。 java8引...

  • Java8时间常用操作

    一、Java8时间常用操作 前言:时间操作在开发中经常被使用到,最近项目是用Java8开发,因此总结一下时间操作常...

网友评论

    本文标题:Java8 日期时间操作

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