Java 1.8 日期时间小记

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/jinjiankang/article/details/99670978
import org.junit.Test;

import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoField;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAccessor;
import java.util.Date;
import java.util.Set;

public class TimeTest {

    /**
     * Instant:An instantaneous(瞬间的) point on the time-line.
     */
    @Test
    public void testInstant() {
        Instant now = Instant.now();

        System.out.println(now.toString());
        // 取毫秒
        System.out.println(now.get(ChronoField.MILLI_OF_SECOND));
        // 取微秒
        System.out.println(now.get(ChronoField.MICRO_OF_SECOND));
        // 取纳秒
        System.out.println(now.get(ChronoField.NANO_OF_SECOND));
        // Instant转LocalDateTime
        LocalDateTime localDateTime = LocalDateTime.ofInstant(now, ZoneId.systemDefault());
        // 2019-08-16T09:00:49.324
        System.out.println(localDateTime);
    }

    /**
     * 默认时区对应的年月日,没有时分秒毫秒
     */
    @Test
    public void testLocalDate() {
        LocalDate now = LocalDate.now();
        System.out.println(now.toString());

        now = LocalDate.of(2019, 7, 3);
        // 2019-07-03
        System.out.println(now.toString());

        //日期加上1天
        LocalDate plusDay = now.plusDays(1);
        System.out.println(plusDay.toString());

        //日期加上一周
        LocalDate plusWeek = now.plusWeeks(1);
        System.out.println(plusWeek.toString());

        //计算当年前的第52天是几月几号
        System.out.println("今年的第52天是:" + now.withDayOfYear(52));

        //字符串转日期
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        TemporalAccessor dateTempora = dateTimeFormatter.parse("2018-01-14");
        LocalDate date = LocalDate.from(dateTempora);
        System.out.println(date);

         //格式化日期
        DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyyMMdd");
        String dateStr = dateTimeFormatter1.format(now);
        System.out.println(dateStr);
    }

    /**
     * 默认时区对应的时分秒毫秒,没有年月日
     */
    @Test
    public void testLocalTime() {
        LocalTime now = LocalTime.now();
        System.out.println(now.toString());

        now = LocalTime.of(23, 10, 10);
        System.out.println(now.toString());

        //时间加上12个小时
        System.out.println("plus 12 hours: " + now.plusHours(12));
    }

    /**
     * 默认时区对应的年月日时分秒毫秒
     */
    @Test
    public void testLocalDateTime() {
        // 获得当前日期时间
        LocalDateTime now = LocalDateTime.now();
        System.out.println(now);

        now = LocalDateTime.of(2019, 7, 3, 9, 10, 10);
        System.out.println(now);

        // 字符串转日期时间
        DateTimeFormatter strToDateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        TemporalAccessor dateTemporal = strToDateFormatter.parse("2017-01-01 12:12:13");
        LocalDate date = LocalDate.from(dateTemporal);
        System.out.println(date);

        // 格式化日期时间
        DateTimeFormatter dateToStrFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
        String dateStr = dateToStrFormatter.format(now);
        System.out.println(dateStr);
    }

    /**
     * 一段时间,例如:2年、3个月、4天等.
     */
    @Test
    public void testPeriod() {
        LocalDate startDate = LocalDate.now();
        LocalDate endDate = startDate.plusDays(1);

        Period period = Period.between(startDate, endDate);
        System.out.println("间隔的天数" + period.getDays());
        System.out.println("间隔的月数:" + period.getMonths());
        System.out.println("间隔的年数:" + period.getYears());

        // 直接使用LocalDate类中的方法计算日期间隔
        long days = startDate.until(endDate, ChronoUnit.DAYS);
        System.out.println("间隔的天数:" + days);
        long months = startDate.until(endDate, ChronoUnit.MONTHS);
        System.out.println("间隔的月数:" + months);
        long weeks = startDate.until(endDate, ChronoUnit.WEEKS);
        System.out.println("间隔的周数:" + weeks);
    }

    @Test
    public void testDuration() {
        LocalDateTime start = LocalDateTime.now();
        LocalDateTime end = start.plusDays(1);
        Duration duration = Duration.between(start, end);
        System.out.println("间隔的秒数:" + duration.get(ChronoUnit.SECONDS));
        System.out.println("间隔的纳秒数:" + duration.get(ChronoUnit.NANOS));
    }

    @Test
    public void testZonedDateTime() {
        ZonedDateTime zonedDatetime = ZonedDateTime.now();
        ZonedDateTime zonedDatetimeFromZone = ZonedDateTime.now(ZoneId.of("America/Los_Angeles"));

        LocalDateTime localDateTime = LocalDateTime.now();
        ZonedDateTime zonedDatetimeFromZone2 = ZonedDateTime.of(localDateTime, ZoneId.of("America/Los_Angeles"));

        System.out.println("默认时区(即北京)时间:" + zonedDatetime);
        System.out.println("美国洛杉矶时间:" + zonedDatetimeFromZone);
        System.out.println("美国洛杉矶时间:" + zonedDatetimeFromZone2);

        Set<String> allZoneIds = ZoneId.getAvailableZoneIds();
        System.out.println("全球时区集合:" + allZoneIds);
    }

    @Test
    public void testDateToLocalDateTime() {
        Date todayDate = new Date();
        LocalDateTime ldt = Instant.ofEpochMilli(todayDate.getTime())
                .atZone(ZoneId.systemDefault())
                .toLocalDateTime();
        System.out.println(ldt);

        LocalDateTime localDateTime = LocalDateTime.now();
        // from为Date类1.8起新增的
        Date date = Date.from(localDateTime.atZone( ZoneId.systemDefault()).toInstant());
        System.out.println(date);

        // toInstant为Date类1.8起新增的
        Instant instant = todayDate.toInstant();
    }

}

猜你喜欢

转载自blog.csdn.net/jinjiankang/article/details/99670978