关于LocalDate的小练习

关于LocalDate的小练习

1.题目

完成以下日期时间处理的需求

  1. 找出下个月的倒数第3天是哪天
  2. 创建一个从2020.1.1 00:00:00 到 2020.12.31 23:59:59 之间的随机日期时间,要求随机的结果能覆盖整个时间段

2.代码

package com.ccjiuhong.assessment;

import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Random;

/**
 * 1. 找出下个月的倒数第3天是哪天
 * 2. 创建一个从2020.1.1 00:00:00 到 2020.12.31 23:59:59 之间的随机日期时间,要求随机的结果能覆盖整个时间段
 *
 * @author G. Seinfeld
 * @since 2020-09-22
 */
public class DateTimeHandler {
  public static void main(String[] args) {
    // 1.找出下个月的倒数第3天是哪天
    LocalDate today = LocalDate.now();
    LocalDate firstDayOfThisMonth = today.withDayOfMonth(1);
    LocalDate firstDayOfTheThirdMonth = firstDayOfThisMonth.plusMonths(2);
    LocalDate result = firstDayOfTheThirdMonth.minusDays(3);
    System.out.println("下个月的倒数第3天是:" + result);

    // LocalDate:本地日期 不包含具体时间 例如 2020-09-27。LocalDate.now(): 今日日期,2020-09-27。
    // today.withDayOfMonth(1):这个月的第一天,返回格式也是:2020-09-01
    // java.time.LocalDateTime.plusMonths(long monthsToAdd)方法:返回此日期时间的副本,并添加了指定的月份。
    // java.time.LocalDateTime.minusDays(longdaysToSubtract)方法返回此LocalDateTime的副本,并减去指定的天数。


    // 2.创建一个从2020.1.1 00:00:00 到 2020.12.31 23:59:59 之间的随机日期时间,要求随机的结果能覆盖整个时间段
    LocalDateTime start = LocalDateTime.of(2020, 1, 1, 0, 0, 0);
    LocalDateTime end = LocalDateTime.of(2020, 12, 31, 23, 59, 59);
    long startSecond = start.atZone(ZoneId.systemDefault()).toInstant().getEpochSecond();
    long endSecond = end.atZone(ZoneId.systemDefault()).toInstant().getEpochSecond();
    long randomSecond = startSecond + new Random().nextInt((int) (endSecond - startSecond + 1));
    Instant randomInstant = Instant.ofEpochSecond(randomSecond);
    LocalDateTime random = LocalDateTime.ofInstant(randomInstant, ZoneId.systemDefault());
    System.out.println("随机日期时间 = " + random);

    // LocalDateTime:结合了日期和时间 但不包含时差和时区 start = 2020-01-01T00:00
    // end = 2020-12-31T23:59:59
    // 获取从1970-01-01T00到2020.1.1的毫秒数 startSecond = 1577808000
    // ZoneId.systemDefault() 是 :Asia/Shanghai
    // 获取从1970-01-01T00到2020.12.31的毫秒数 endSecond = 1609430399
    // 在这两个毫秒数之间的随机毫秒数
    // 随机毫秒数转换成时间格式

    // 方法:public static Instant ofEpochSecond (long epochSecond)
    // 这个方法只接受一个参数epochSecond,它是从1970-01-01T00:00:00Z开始的秒数。
    // 返回为Instant类型的数据,例如:1970-01-14T21:20:00Z

    //  Java中LocalDateTime类的ofInstant(Instant Instant,ZoneId zone)方法:
    // 用于使用Instant和区域ID创建LocalDateTime的实例。将这两个参数传递给方法,并且在这两个参数的基础上方法返回LocalDateTime。

  }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值