当前位置 博文首页 > weixin_45618990的博客:LocalDataTime相关用法

    weixin_45618990的博客:LocalDataTime相关用法

    作者:[db:作者] 时间:2021-07-19 10:22

    LocalDateTime

    基本用法

    /* 获取日期的年月日周时分秒 */
    LocalDateTime localDateTime= LocalDateTime.now();  //2020-09-24T15:54:45.926
    int dayOfYear = localDateTime.getDayOfYear();  //本年当中第几天 -----268
    int dayOfMonth = localDateTime.getDayOfMonth();  //本月当中第几天-----24
    DayOfWeek dayOfWeek = localDateTime.getDayOfWeek();//本周中星期几----THURSDA
    int number=dayOfWeek.getValue();  //本周星期几数字-----4
    
    //获取当天时间的年月日时分秒
    int year = localDateTime.getYear();
    Month month = localDateTime.getMonth();
    int day = localDateTime.getDayOfMonth();
    int hour = localDateTime.getHour();
    int minute = localDateTime.getMinute();
    int second = localDateTime.getSecond();
    
    
    
    
    LocalDateTime today_start = LocalDateTime.of(LocalDate.now(), LocalTime.MIN); //当天零点----2020-09-24T00:00
    
    
    String td_st_str=today_start.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); //获取当天结束时-----20200924000000
    
    
    LocalDateTime today_end = LocalDateTime.of(LocalDate.now(), LocalTime.MAX); 
    //当天晚上零点-------2020-09-24T23:59:59.999999999
    
    
    Long newSecond1 = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli(); //获取long型毫秒时间
    
    LocalDateTime localDateTime = LocalDateTime.of(2020, 9, 24, 9, 43, 20);
    //根据指定日期/时间创建对象--------------2020-09-13T09:43:20 
    
    

    日期时间的加减

    • 对于LocalDate,只有精度大于或等于日的加减,如年、月、日;

    • 对于LocalTime,只有精度小于或等于时的加减,如时、分、秒、纳秒;

    • 对于LocalDateTime,则可以进行任意精度的时间相加减;

    例:

    
    LocalDateTime localDateTime= LocalDateTime.now();
    
    /* 方法一  参数都是long型,返回值都是LocalDateTime  */
    //增加
    LocalDateTime plusYearsResult = localDateTime.plusYears(2L)
      //当前时间加2年后------ 2022-09-24T15:34:42.900 
      localDateTime.plusMonths(3L);   //当前时间加3个月后
      localDateTime.plusDays(7L);    //当前时间加7日后
      localDateTime.plusHours(2L)    //当前时间加2小时后
      localDateTime.plusMinutes(10L); //当前时间加10分钟后
      localDateTime.plusSeconds(10L); //当前时间加10秒后
    
    //减法
     LocalDateTime lo=localDateTime.minusMonths(2L);  
     //当前时间减2月后-----2020-07-24T15:52:43.445
    
    
    //当前时间前三位
    LocalDateTime localDateTime= LocalDateTime.now();  //2020-09-24T15:54:45.926
    
    LocalDateTime L=localDateTime.minusNanos(2L);   //2020-09-24T15:54:45.925999998
    
    
    
    
    /* 方法二 即plus(long amountToAdd, TemporalUnit unit)
                   参数1 : 相加的数量, 参数2 : 相加的单位     
    */
    LocalDateTime nextMonth = localDateTime.plus(1, ChronoUnit.MONTHS);
    //当前时间加一个月------2020-10-24T16:03:22.314
    
      
    

    将年、月、日等修改为指定的值,并返回新的日期(时间)对象

    析: 其效果与时间日期相加减差不多,如今天是2018-01-13,要想变为2018-01-20有两种方式

    a. localDate.plusDays(20L) -> 相加指定的天数

    b. localDate.withDayOfYear(20) -> 直接指定到哪一天

    LocalDate localDate = LocalDate.now();
    //当前时间基础上,指定本年当中的第几天,取值范围为1-365,366
    LocalDate withDayOfYearResult = localDate.withDayOfYear(200);
    
    //当前时间基础上,指定本月当中的第几天,取值范围为1-29,30,31
    LocalDate withDayOfMonthResult = localDate.withDayOfMonth(5);
    
    //当前时间基础上,直接指定年份
    LocalDate withYearResult = localDate.withYear(2017);
    
    //当前时间基础上,直接指定月份
    LocalDate withMonthResult = localDate.withMonth(5);
    

    时间戳

    比如Date.from(Instant)就是用来把Instant转换成java.util.date的,

    而new Date().toInstant()就是将Date转换成Instant的

    Instant instant = Instant.now();
    Date date = Date.from(instant);
    Instant instant2 = date.toInstant();
    

    计算时间、日期间隔

    Duration:用于计算两个“时间”间隔

    Period:用于计算两个“日期”间隔

    //计算两个日期的日期间隔-年月日
    LocalDate date1 = LocalDate.of(2018, 2, 13);
    LocalDate date2 = LocalDate.of(2017, 3, 12);
    //内部是用date2-date1,所以得到的结果是负数
    
    Period period = Period.between(date1, date2);
    //注意,当获取两个日期的间隔时,并不是单纯的年月日对应的数字相加减,而是会先算出具体差多少天,在折算成相差几年几月几日的
    
    long years = period.getYears();
    long months = period.getMonths();
    long days = period.getDays();
    //相差的年月日分别为:0,-11,-1
    
    
    
    long years = period.get(ChronoUnit.YEARS);
    long months = period.get(ChronoUnit.MONTHS);
    long days = period.get(ChronoUnit.DAYS);
    //相差的年月日分别为:0,-11,-1
    
    
    LocalDateTime date3 = LocalDateTime.now();
    LocalDateTime date4 = LocalDateTime.of(2018, 1, 13, 22, 30, 10);
    Duration duration = Duration.between(date3, date4);
    
    long days = duration.toDays();  //天
    long hours=  duration.toHours();  //时
    long minutes=  duration.toMinutes(); //分
    long mills=  duration.toMillis();  //毫秒
    long nanos= duration.toNanos();   //纳秒
    /
    
    

    LocalDateTime与String日期互相转换

    DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    LocalDateTime time = LocalDateTime.now();
    
    String localTime = df.format(time);   
    //日期形式转化为string--------2017-09-30 10:40:06
    
    LocalDateTime ldt = LocalDateTime.parse("2017-09-28 17:07:05",df);   
    //将时间字符串形式转化为日期对象-----2017-09-28T17:07:05
    

    long毫秒值转换为日期

    DateTimeFormatter df= DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    String longToDateTime = df.format(LocalDateTime.ofInstant(
                           Instant.ofEpochMilli(System.currentTimeMillis()),ZoneId.of("Asia/Shanghai")));
    
    cs
    下一篇:没有了