LocalDate笔记

来源

占小狼发布的一篇博客

Date

Java处理日期、日历和时间的不足之处:将 java.util.Date 设定为可变类型,以及 SimpleDateFormat 的非线程安全使其应用非常受限。然后就在 java8 上面增加新的特性。

LocalDate

  1. Instant 瞬时实例。
  2. LocalDate:本地日期,不包含具体时间 例如:2014-01-14 可以用来记录生日、纪念日、加盟日等。
  3. LocalTime:本地时间,不包含日期。
  4. LocalDateTime:组合了日期和时间,但不包含时差和时区信息。
  5. ZonedDateTime:最完整的日期时间,包含时区和相对UTC或格林威治的时差。

新API还引入了 ZoneOffSet 和 ZoneId 类,使得解决时区问题更为简便。解析、格式化时间的 DateTimeFormatter 类也全部重新设计。

package com.test;

import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.Date;
/**
 * @author xxx
 * @date 2020/6/5 16:43
 * @desc ...  copy
 */
public class T {

    //DATE --> LocalDate
    public static LocalDate date2LocalDate(Date date) {
        return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
    }
    
   // LocalDate  --> DATE
    public static Date localDate2Date(LocalDate localDate) {
        if(null == localDate) {
            return null;
        }
        ZonedDateTime zonedDateTime = localDate.atStartOfDay(ZoneId.systemDefault());
        return Date.from(zonedDateTime.toInstant());
    }
    
    // localDateTime  --> DATE
    public static Date localDateTime2Date(LocalDateTime localDateTime) {
        return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
    }

    //DATE --> String
    public static String formatDate(Date date) {
        LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
        return localDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
    }

//LocalDateTime 转 Long
localDateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli())
//Long转 LocalDateTime 
LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), ZoneId.systemDefault()).toLocalDate());


    //获取今天的日期
    public void getCurrentDate(){
        LocalDate today = LocalDate.now();
        System.out.println("Today's Local date : " + today);
    }

    //获取年、月、日信息
    public void getDetailDate(){
        LocalDate today = LocalDate.now();
        int year = today.getYear();
        int month = today.getMonthValue();
        int day = today.getDayOfMonth();
        System.out.printf("Year : %d  Month : %d  day : %d t %n", year, month, day);
    }

    //处理特定日期
    public void handleSpecilDate(){
        LocalDate dateOfBirth = LocalDate.of(2018, 01, 21);
        System.out.println("The specil date is : " + dateOfBirth);
    }


    //获取当前时间
    public void getCurrentTime(){
        LocalTime time = LocalTime.now();
        System.out.println("local time now : " + time);
    }

    // LocalTime  加减时间
    public void plusHours(){
        LocalTime time = LocalTime.now();
        LocalTime newTime = time.plusHours(2); // 增加两小时
        System.out.println("Time after 2 hours : " +  newTime);
        LocalTime time1 = time.minusHours(2);  //减少两小时
        System.out.println("Time after 2 hours : " +  time1);

    }

    //LocalDate  加减时间
    public void nextWeek(){
        LocalDate today = LocalDate.now();
        //加一周
        LocalDate nextWeek = today.plus(1, ChronoUnit.WEEKS);
		//减一个月
        LocalDate nextWeek = today.minus(1, ChronoUnit.DAYS;
        
        System.out.println("Today is : " + today);
        System.out.println("Date after 1 week : " + nextWeek);
    }



    public void clock(){
        // 根据系统时间返回当前时间并设置为UTC。
        Clock clock = Clock.systemUTC();
        System.out.println("Clock : " + clock);

        // 根据系统时钟区域返回时间
        Clock defaultClock = Clock.systemDefaultZone();
        System.out.println("Clock : " + clock);
    }


    //时区处理
    public void getZoneTime(){
        //设置时区
        ZoneId america = ZoneId.of("America/New_York");

        LocalDateTime localtDateAndTime = LocalDateTime.now();

        ZonedDateTime dateAndTimeInNewYork  = ZonedDateTime.of(localtDateAndTime, america );
        System.out.println("现在的日期和时间在特定的时区 : " + dateAndTimeInNewYork);
    }

    //检查闰年
    public void isLeapYear(){
        LocalDate today = LocalDate.now();
        if(today.isLeapYear()){
            System.out.println("This year is Leap year");
        }else {
            System.out.println("2018 is not a Leap year");
        }
    }

    //计算两个日期之间的天数和月数
    public void calcDateDays(){
        LocalDate today = LocalDate.now();

        LocalDate java8Release = LocalDate.of(2018, Month.MAY, 14);

        Period periodToNextJavaRelease = Period.between(today, java8Release);

        System.out.println("Months left between today and Java 8 release : "
                + periodToNextJavaRelease.getMonths() );
    }

    // 包含时差信息的日期和时间
    public void ZoneOffset(){
        LocalDateTime datetime = LocalDateTime.of(2018, Month.FEBRUARY, 14, 19, 30);
        ZoneOffset offset = ZoneOffset.of("+05:30");
        OffsetDateTime date = OffsetDateTime.of(datetime, offset);
        System.out.println("Date and Time with timezone offset in Java : " + date);
    }

    // 获取时间戳
    public void getTimestamp(){
        Instant timestamp = Instant.now();
        System.out.println("What is value of this instant " + timestamp);
    }

    // 使用预定义的格式化工具去解析或格式化日期
    public void formateDate(){
        String dayAfterTommorrow = "20180210";
        LocalDate formatted = LocalDate.parse(dayAfterTommorrow, DateTimeFormatter.BASIC_ISO_DATE);
        System.out.printf("Date generated from String %s is %s %n", dayAfterTommorrow, formatted);
    }
}

获取当月第一天

LocalDate first= LocalDate.now().with(TemporalAdjusters.firstDayOfMonth());

获取当月最后一天

 LocalDate with = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth());
 

获取某天0点0分0秒 ->Long(LocalDate,LocalDateTime)

//Long
 LocalDate date1 = LocalDate.now();
 long s= date1.atStartOfDay(ZoneId.systemDefault()).toInstant().toEpochMilli() 
 //LocalDate
 LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toLocalDate();
 //LocalDateTime 
 LocalDateTime qws = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);

获取某天23点59分59秒 ->Long(LocalDate,LocalDateTime)

 
 LocalDateTime dsdf = LocalDateTime.of(LocalDate.now(), LocalTime.MAX);

String yyyy-MM 转 LocalDate

  DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM");
  YearMonth ym = YearMonth.parse("2020-09", fmt);
  LocalDate date = ym.atEndOfMonth();//月末
  LocalDate date1 = ym.atDay(0);//月初

LocalDate 转 String yyyy-MM

 DateTimeFormatter DATE_DTF = DateTimeFormatter.ofPattern("yyyy-MM");
  String statisticDate = LocalDate.now().format(DATE_DTF);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值