首页 > 其他 > 详细

32、JDK1.8新的时间日期类(LocalDateTime、DateTimeFormatter、Instant、ZoneId、Duration、Period、ZonedDateTime)

时间:2020-06-15 22:03:20      阅读:50      评论:0      收藏:0      [点我收藏+]

JDK 1.8新特性

时间日期类

LocalDateTime

package org.westos.demo;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

/**
 * @author lwj
 * @date 2020/6/15 18:32
 */
public class MyTest {
    public static void main(String[] args) {
        /*
        Date
        SimpleDateFormat
        Calendar
        线程不安全的API,JDK1.8新增了一套时间日期API
         */

        /*
        LocalDate:年月日
        LocalTime:时分秒
        LocalDateTime:年月日时分秒
        获取对象的方法:1、now()静态方法;2、of静态方法
         */
        LocalDateTime now = LocalDateTime.now();
        //获取当前的年月日时分秒
        System.out.println(now);
        //2020-06-15T18:37:30.516
        LocalDate localDate = LocalDate.now();
        System.out.println(localDate);
        //2020-06-15
        LocalTime localTime = LocalTime.now();
        System.out.println(localTime);
        //18:37:30.516


        //指定年月日时分秒
        LocalDateTime localDateTime = LocalDateTime.of(2020, 6, 15, 18, 40, 12);
        System.out.println(localDateTime);
        //2020-06-15T18:40:12
        LocalDate localDate1 = LocalDate.of(2020, 8, 31);
        System.out.println(localDate1);
        //2020-08-31
        LocalTime localTime1 = LocalTime.of(12, 34, 56);
        System.out.println(localTime1);
        //12:34:56
    }
}

获取年月日,时分秒:

package org.westos.demo;

import java.time.DayOfWeek;
import java.time.LocalDateTime;
import java.time.Month;

/**
 * @author lwj
 * @date 2020/6/15 18:40
 */
public class MyTest2 {
    public static void main(String[] args) {
        LocalDateTime localDateTime = LocalDateTime.now();
        int year = localDateTime.getYear();
        //获取单独的年份
        System.out.println(year);
        //2020
        Month month = localDateTime.getMonth();
        //Month是枚举类型enum,从一月到十二月
        System.out.println(month);
        //JUNE
        //输出枚举类的实例,默认打印实例的名称
        int monthValue = localDateTime.getMonthValue();
        System.out.println(monthValue);
        //6
        int dayOfMonth = localDateTime.getDayOfMonth();
        System.out.println(dayOfMonth);
        //15
        int hour = localDateTime.getHour();
        System.out.println(hour);
        //18
        int minute = localDateTime.getMinute();
        System.out.println(minute);
        //43
        int second = localDateTime.getSecond();
        System.out.println(second);
        //22


        DayOfWeek dayOfWeek = localDateTime.getDayOfWeek();
        //DayOfWeek是枚举类型enum,从星期一到星期日
        System.out.println(dayOfWeek);
        //MONDAY 星期一
        int dayOfYear = localDateTime.getDayOfYear();
        System.out.println(dayOfYear);
        //167
    }
}

格式化日期:

package org.westos.demo;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * @author lwj
 * @date 2020/6/15 18:50
 */
public class MyTest3 {
    public static void main(String[] args) {
        //格式化日期
        LocalDateTime localDateTime = LocalDateTime.now();
        System.out.println(localDateTime);
        //2020-06-15T18:51:13.901

        String format = localDateTime.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss"));
        //格式化日期:format(DateTimeFormatter实例)
        System.out.println(format);
        //2020年06月15日 18:53:46
    }
}

解析日期字符串:

package org.westos.demo;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * @author lwj
 * @date 2020/6/15 19:28
 */
public class MyTest6 {
    public static void main(String[] args) {
        //解析日期字符串
        String s = "2020-06-15 19:30:20";
        LocalDateTime localDateTime = LocalDateTime.parse(s, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));

        System.out.println(localDateTime);
        //2020-06-15T19:30:20
        
    }
}

转换:

package org.westos.demo;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

/**
 * @author lwj
 * @date 2020/6/15 18:58
 */
public class MyTest4 {
    public static void main(String[] args) {
        LocalDateTime localDateTime = LocalDateTime.now();
        LocalDate localDate = localDateTime.toLocalDate();
        //LocalDateTime转LocalDate
        System.out.println(localDate);
        //2020-06-15
        
        LocalTime localTime = localDateTime.toLocalTime();
        //LocalDateTime转LocalTime
        System.out.println(localTime);
        //18:59:40.575
    }
}

判断

package org.westos.demo;

import java.time.LocalDate;

/**
 * @author lwj
 * @date 2020/6/15 19:00
 */
public class MyTest5 {
    public static void main(String[] args) {
        LocalDate now = LocalDate.now();

        LocalDate localDate = LocalDate.of(2019, 9, 22);

        System.out.println(now.isAfter(localDate));
        //判断一个日期在不在另一个日期之后
        //true

        System.out.println(localDate.isBefore(now));
        //判断一个日期在不在另一个日期之前
        //true

        //判断一个年份是不是闰年
        System.out.println(now.isLeapYear());
        //true
    }
}

加减时间

package org.westos.demo;

import java.time.LocalDateTime;

/**
 * @author lwj
 * @date 2020/6/15 19:39
 */
public class MyTest7 {
    public static void main(String[] args) {
        //加时间
        LocalDateTime now = LocalDateTime.now();
        System.out.println(now);
        //2020-06-15T19:40:36.233
        LocalDateTime localDateTime = now.plusMinutes(3);
        System.out.println(localDateTime);
        //2020-06-15T19:43:36.233
        LocalDateTime localDateTime1 = localDateTime.plusDays(3);
        System.out.println(localDateTime1);
        //2020-06-18T19:43:36.233

        //减时间
        LocalDateTime localDateTime2 = now.minusDays(2);
        System.out.println(localDateTime2);
        //2020-06-13T19:40:36.233
    }
}

指定日期,with系列:

package org.westos.demo;

import java.time.LocalDateTime;

/**
 * @author lwj
 * @date 2020/6/15 19:45
 */
public class MyTest8 {
    public static void main(String[] args) {
        LocalDateTime now = LocalDateTime.now();
        LocalDateTime localDateTime = now.withYear(2019);
        //指定年份
        LocalDateTime localDateTime1 = localDateTime.withMonth(11);
        System.out.println(localDateTime1);
        //2019-11-15T19:47:07.539
    }
}
package org.westos.demo;

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjuster;
import java.time.temporal.TemporalAdjusters;

/**
 * @author lwj
 * @date 2020/6/15 20:25
 */
public class MyDemo {
    public static void main(String[] args) {
        LocalDate now = LocalDate.now();

        //TemporalAdjuster 接口
        //TemporalAdjusters工具类中的方法会返回接口的子类对象
        LocalDate with = now.with(TemporalAdjusters.firstDayOfMonth());
        //指定日期,指定为当月的第一天
        System.out.println(with);
        //2020-06-01

        LocalDate with1 = now.with(TemporalAdjusters.lastDayOfMonth());
        //指定日期,指定为当月的最后一天
        System.out.println(with1);
        //2020-06-30

        LocalDate with2 = now.with(TemporalAdjusters.firstInMonth(DayOfWeek.SUNDAY));
        //指定日期,指定为本月的第一个周日
        System.out.println(with2);
        //2020-06-07

        LocalDate with3 = now.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
        //指定日期,指定为下周周一
        System.out.println(with3);
        //2020-06-22
    }
}

Instant

package org.westos.demo2;

import java.time.Instant;

/**
 * @author lwj
 * @date 2020/6/15 20:00
 */
public class MyTest {
    public static void main(String[] args) {
        //时间戳类Instant
        Instant now = Instant.now();
        System.out.println(now);
        //2020-06-15T12:03:56.522Z

        long l = now.toEpochMilli();
        //转换为毫秒
        System.out.println(l);
        //1592222636522
        System.out.println(System.currentTimeMillis());
        //1592222636577

        System.out.println(now.getEpochSecond());
        //时间戳转为以秒为单位
        //1592222636
    }
}
package org.westos.demo2;

import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;

/**
 * @author lwj
 * @date 2020/6/15 20:05
 */
public class MyTest2 {
    public static void main(String[] args) {
        Instant now = Instant.now();
        System.out.println(now);
        //不是本地时间
        //2020-06-15T12:08:01.727Z
        OffsetDateTime offsetDateTime = now.atOffset(ZoneOffset.ofHours(8));
        //设置偏移
        System.out.println(offsetDateTime);
        //2020-06-15T20:08:01.727+08:00
    }
}

ZoneId

package org.westos.demo2;

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;

/**
 * @author lwj
 * @date 2020/6/15 20:10
 */
public class MyTest3 {
    public static void main(String[] args) {
        //ZoneId 世界时区类

        ZoneId zoneId = ZoneId.systemDefault();
        //获取系统的默认时区编号
        System.out.println(zoneId);
        //Asia/Shanghai

        System.out.println(ZoneId.getAvailableZoneIds().size());
        //获取世界所有时区编号
        //600

        ZoneId.getAvailableZoneIds().forEach(System.out::println);


        LocalDateTime japan = LocalDateTime.now(ZoneId.of("Japan"));
        System.out.println(japan);
        //2020-06-15T21:17:19.523
        //此刻日本的时间,在now方法中指定时区

        LocalDateTime egypt = LocalDateTime.now(ZoneId.of("Egypt"));
        System.out.println(egypt);
        //2020-06-15T14:17:14.495
        //埃及时间

        Instant instant = Instant.ofEpochMilli(1000);
        //给计算机元年增加毫秒数
        System.out.println(instant);
        //1970-01-01T00:00:01Z

        Instant instant1 = Instant.ofEpochSecond(60);
        //给计算机元年增加秒数
        System.out.println(instant1);
        //1970-01-01T00:01:00Z
    }
}

Duration、Period

package org.westos.demo3;

import java.time.Duration;
import java.time.Instant;

/**
 * @author lwj
 * @date 2020/6/15 20:39
 */
public class MyTest {
    public static void main(String[] args) {
        //long start = System.currentTimeMillis();
        Instant start = Instant.now();
        for (int i = 0; i < 20000; i++) {
            System.out.println(i);
        }
        Instant end = Instant.now();

        //获取两个时间戳的间隔
        Duration duration = Duration.between(start, end);
        //public static Duration between(Temporal startInclusive, Temporal endExclusive)
        //Instant是Temporal接口的子类
        long l = duration.toMillis();
        System.out.println(l);
        //139
    }
}
package org.westos.demo3;

import java.time.Instant;
import java.time.LocalDate;
import java.time.Period;

/**
 * @author lwj
 * @date 2020/6/15 20:44
 */
public class MyTest2 {
    public static void main(String[] args) {
        LocalDate birthday = LocalDate.of(1998, 11, 8);
        LocalDate now = LocalDate.now();

        Period between = Period.between(birthday, now);
        //获取两个日期的间隔
        //public static Period between(LocalDate startDateInclusive, LocalDate endDateExclusive)
        int years = between.getYears();
        int months = between.getMonths();
        int days = between.getDays();

        System.out.println("从出生到现在已经" + years + "年" + months + "月" + days + "天");
        //从出生到现在已经21年7月7天
    }
}

ZonedDateTime

package org.westos.demo3;

import java.time.LocalDateTime;
import java.time.ZonedDateTime;

/**
 * @author lwj
 * @date 2020/6/15 21:05
 */
public class MyTest3 {
    public static void main(String[] args) {
        /*
        ZonedDateTime
         */
        ZonedDateTime now = ZonedDateTime.now();
        System.out.println(now);
        //2020-06-15T21:07:13.839+08:00[Asia/Shanghai]

        LocalDateTime now1 = LocalDateTime.now();
        System.out.println(now1);
        //2020-06-15T21:07:13.840
    }
}

32、JDK1.8新的时间日期类(LocalDateTime、DateTimeFormatter、Instant、ZoneId、Duration、Period、ZonedDateTime)

原文:https://www.cnblogs.com/shawnyue-08/p/13137980.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!