记录每一天,Java.time 中时间日期的处理。

LocalDate 处理日期

  在学习 jdk1.8 中其中有一个对日期,时间处理很棒的方法。妈妈再也不用担心我不会处理日期,时间了。


/**
* 在 jdk1.8 中 时间 日期 的处理 java.time
*/
@Slf4j
public class dateTest {


@Test
public void test01() {
// 创建指定的日期时间
LocalDate date1 = LocalDate.of(2021, 05, 05);
System.out.println(date1);

// 获取当前的日期 默认 yyyy-mm-dd
LocalDate now = LocalDate.now();
System.out.println("当前日期:" + now);

// 取上月 2023-06-23
LocalDate last_month = LocalDate.of(now.getYear(), now.getMonthValue() - 1, now.getDayOfMonth());
System.out.println("1.上月:" + last_month);
LocalDate last_month2 = now.minusMonths(1);
System.out.println("2.上月:" + last_month2);

//取下月
LocalDate next_month = now.plusMonths(1);
System.out.println("下月:"+next_month.toString());

//取前一天
LocalDate last_day = LocalDate.of(now.getYear(), now.getMonthValue(), now.getDayOfMonth() - 1);
System.out.println("1.上一天:"+last_day);
LocalDate last_day2 = now.minusDays(1);
System.out.println("2.上一天:"+last_day2);

//取后一天
LocalDate next_day = now.plusDays(1);
System.out.println("下一天"+next_day);

//取上一年
LocalDate last_year = LocalDate.of(now.getYear()-1, now.getMonthValue(), now.getDayOfMonth());
System.out.println("1.上一年:"+last_year);
LocalDate last_year2 = now.minusYears(1);
System.out.println("2.上一天:"+last_year2);

//取下一年
LocalDate next_year = now.plusYears(1);
System.out.println("下一年"+next_year);

// 日期的修改
LocalDate localDate = now.withYear(1998);
System.out.println("日期修改:"+localDate);

//日期的比较
LocalDate date = LocalDate.of(2023, 7, 22);
System.out.println("日期的比较:之后"+now.isAfter(date));
System.out.println("日期的比较:之前" +now.isBefore(date));
System.out.println("日期的比较:相等"+now.isEqual(date));

// 格式化
DateTimeFormatter isoLocalDate = DateTimeFormatter.ISO_LOCAL_DATE;
System.out.println(now.format(isoLocalDate));

DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
System.out.println(now.format(dateTimeFormatter));

LocalDateTime now_date_time = LocalDateTime.now();
System.out.println(now_date_time.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));

//将字符串解析为日期时间类型
LocalDate parse = LocalDate.parse("20230301", dateTimeFormatter);
System.out.println(parse);


// 根据 localdate 对象获取对应的日期信息
int year = now.getYear();
Month month = now.getMonth();
int dayOfMonth = now.getDayOfMonth();
DayOfWeek dayOfWeek = now.getDayOfWeek();
System.out.println("年" + year + "\n月" + month + "\n日" + dayOfMonth + "\n周" + dayOfWeek);

}

@Test
public void test02() {
//获得指定的时间 05:22:33
LocalTime of = LocalTime.of(5, 22, 33);
System.out.println(of);

//获取当前时间 18:23:36.670
LocalTime now = LocalTime.now();
System.out.println(now);

//获取时间信息
System.out.println(now.getHour());
System.out.println(now.getMinute());
System.out.println(now.getHour());
}

@Test
public void test03() {
//获取当前日期时间 2023-07-23T18:28:50.616
LocalDateTime now = LocalDateTime.now();
System.out.println(now);

// 获取指定日期的时间 2023-12-01T03:23:11
LocalDateTime of = LocalDateTime.of(2023
, 12
, 1
, 3
, 23
, 11);
System.out.println(of);
}

@Test
public void test04() throws Exception{
//获取时间戳
Instant now = Instant.now();
System.out.println("当前时间戳"+ now);

// e.g 做 是运行时间统计
Instant now1 = Instant.now();
Thread.sleep(5000);
Instant now2 = Instant.now();
System.out.println("运行时间:" + (now2.getEpochSecond() - now1.getEpochSecond()) + "秒");

//e.g 计算 日期时间的差
/**
* Duration : 用来计算两个时间差
* Period : 用来计算两个日期差
*/

//计算时间差
LocalTime now3 = LocalTime.now();
LocalTime date = LocalTime.of(22, 44, 22);

Duration duration = Duration.between(date, now3);
System.out.println(duration.toDays());
System.out.println(duration.toHours());
System.out.println(duration.toMinutes());

//计算日期差
LocalDate now4 = LocalDate.now();
LocalDate date2 = LocalDate.of(2023, 7, 20);

Period period = Period.between(date2, now4);
System.out.println(period.getYears());
System.out.println(period.getMonths());
System.out.println(period.getDays());

}

@Test
public void test05(){
/**
* 时间矫正器 TemporalAdjuster
*/

//e.g 找到下月第一天
LocalDate now = LocalDate.now();
TemporalAdjuster adjuster = (temporal)->{
LocalDate date = (LocalDate) temporal;
LocalDate localDate = date.plusMonths(1).withDayOfMonth(1);
System.out.println(localDate);
return localDate;
};

LocalDate next_month = now.with(adjuster);
System.out.println(next_month);

//可以看到主要是对 now 进行的操作 ,那么问题来了为什么要 用 TemporalAdjuster 呢
LocalDate localDate1 = now.plusMonths(1).withDayOfMonth(1);
System.out.println(localDate1);

// TemporalAdjusters 通过该类的静态方法体统了大量的常用 TemporalAdjuster 操作,像之前的 例子 可以直接通过封装好的方法来使用
TemporalAdjuster adjuster1 = TemporalAdjusters.firstDayOfNextMonth();
System.out.println(now.with(adjuster1));

// e.g 找到上月的第一天
LocalDate now1 = LocalDate.now();
LocalDate localDate = now1.minusMonths(1).withDayOfMonth(1);
System.out.println("上月的第一天:"+localDate);

//e.g 找到 当月的最后一天
LocalDate now2 = LocalDate.now();
LocalDate localDate2 = now2.plusMonths(1).withDayOfMonth(1);
LocalDate localDate3 = localDate2.minusDays(1);
System.out.println("当月的最后一天:"+localDate3);

//e.g 找到上月的最后一天
LocalDate now3 = LocalDate.now();
LocalDate localDate4 = now3.withDayOfMonth(1);
LocalDate localDate5 = localDate4.minusDays(1);
System.out.println("上月的最后一天"+localDate5);


}

@Test
public void test06(){
LocalDate date = LocalDate.parse("2023-02-11", DateTimeFormatter.ofPattern("yyyy-MM-dd"));
log.info("年:{}",date.getYear());
log.info("月:{}",date.getMonthValue());
log.info("日:{}",date.getDayOfMonth());
// 上面发现取出的月份是 2 而不是 02 ,那要怎么取 02 呢
String month = date.format(DateTimeFormatter.ofPattern("MM"));
log.info("月份:{}",month);

//取前一天
LocalDate localDate = date.minusDays(1);
System.out.println(localDate);

//后一天
LocalDate localDate1 = date.plusDays(1);
System.out.println(localDate1.format(DateTimeFormatter.ofPattern("yyyyMMdd")));
}
}
posted @   吊车尾的日常  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示