天天看點

Date、LocalDate、LocalDateTime、LocalTime互相轉換LocalDateLocalTimeLocalDateTime以 LocalDate 為例日期格式化日期轉換時間戳時間校正器

LocalDate

年月日

LocalTime

時分秒

LocalDateTime

年月日時分秒

以 LocalDate 為例

package com.lch.time;

import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAccessor;
import java.time.temporal.TemporalAdjusters;
import java.util.Date;

/**
 * 時間轉換
 */
public class TimeConvert {

    public static void main(String[] args) {

        //擷取指定時間(年月日)
        LocalDate appointTime = LocalDate.of(2022, 1, 1);

        //擷取現在的時間(年月日)
        LocalDate nowTime = LocalDate.now();

        //擷取某日期是當周星期幾(枚舉類型)
        DayOfWeek dayOfWeek = nowTime.getDayOfWeek();

        //擷取某日期是當年的第幾天
        int dayOfYear = nowTime.getDayOfYear();

        //擷取某日期是當月的幾号
        int dayOfMonth = nowTime.getDayOfMonth();

        //擷取年
        int year = nowTime.getYear();

        //擷取月份對象(枚舉) 如 :四月APRIL
        Month month = nowTime.getMonth();

        //擷取月的值
        int monthValue = nowTime.getMonthValue();

        //加N天
        LocalDate localDate = nowTime.plusDays(1);

        //加N星期
        LocalDate localDate1 = nowTime.plusWeeks(1);

        //加N月
        LocalDate localDate2 = nowTime.plusMonths(1);

        //加N年
        LocalDate localDate3 = nowTime.plusYears(1);

        //減n天
        LocalDate localDate4 = nowTime.minusDays(1);

        //減n周
        LocalDate localDate5 = nowTime.minusWeeks(1);

        //減n月
        LocalDate localDate6 = nowTime.minusMonths(1);

        //減n年
        LocalDate localDate7 = nowTime.minusYears(1);

        //擷取兩個日期之間的間隔
        Period period = Period.between(LocalDate.of(2021, 6, 24), LocalDate.of(2021, 5, 24));
        //擷取兩個日期相差的天數
        int days = period.getDays();
        //擷取兩個日期相差的月
        int months = period.getMonths();
        //擷取兩個日期相差的年
        int years = period.getYears();
           

日期格式化

/**
         * DateTimeFormatter : 日期格式化類
         */
         
        //指定格式
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");

        //将日期轉成字元串
        String nowtimeStr = dtf.format(nowTime);

        //将字元串轉成日期
        TemporalAccessor newTime = dtf.parse("2020-10-10");
           

日期轉換

Date 與 LocalDateTime 轉換

/**
         * Date 轉成 LocalDateTime
         */
        LocalDateTime localDateTime = new Date()
                                    .toInstant()
                                    .atZone(ZoneId.systemDefault())
                                    .toLocalDateTime();

        /**
         * LocalDateTime 轉成 Date
         */
        Date date = Date.from(
                        LocalDateTime.now()
                        .atZone(ZoneId.systemDefault())
                        .toInstant()
                    );
           

Date 與 LocalDate 轉換

/**
         * Date 轉成 LocalDate
         */
        LocalDate localDate = new Date()
                            .toInstant()
                            .atZone(ZoneId.systemDefault())
                            .toLocalDate();
                    
        /**
         * LocalDate 轉成 Date
         */
        Date date2 = Date.from(
                         LocalDate.now()
                         .atStartOfDay(ZoneId.systemDefault())
                         .toInstant()
                     );
           

Date 與 LocalTime 轉換

/**
         * Date 轉成 LocalTime
         */
        LocalTime localTime = new Date()
                            .toInstant()
                            .atZone(ZoneId.systemDefault())
                            .toLocalTime();            

        /**
         * LocalTime 轉成 Date
         */
        Date date1 = Date.from(
                        LocalDateTime.of(LocalDate.now(), LocalTime.now())
                        .atZone(ZoneId.systemDefault())
                        .toInstant()
                    );
	 }
}
           

LocalDateTime 轉成 LocalDate

LocalDate localDate9 = LocalDateTime.now().toLocalDate();	
           

LocalDateTime 轉成 LocalTime

LocalTime localTime1 = LocalDateTime.now().toLocalTime();  
           

時間戳

/**
         * Instant:時間戳(以Unix元年 1970年1月1日 00:00:00到某個時間毫秒值)
         */
         
        //擷取目前時間,已0°經線計算
        Instant now = Instant.now();

        //轉成毫秒時間
        long milli = now.toEpochMilli();


        /**
         * 擷取兩個時間的間隔
         */
        Duration duration = Duration.between(now, now.plusSeconds(60));

        // 兩個時間間隔的秒數
        long seconds = duration.getSeconds();

        //兩個時間間隔的毫秒數
        long millis = duration.toMillis();

        //兩個時間間隔的天數
        long toDays = duration.toDays();

        //兩個時間間隔的小時數
        long toHours = duration.toHours();
           

時間校正器

/**
         * TemporalAdjusters(接口):時間校正器
         */
         
        //将時間調整為下周一
        
        LocalDateTime dateTime = LocalDateTime.now();
        
        LocalDateTime newDateTime = dateTime.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
    }
}