文章16 | 阅读 6564 | 点赞0
LocalDate 是Java8 中用于表示日期的时间类, 只表示年月日.
package org.zongf.learn.java8.date;
import org.junit.Test;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.*;
/** * @Description: 测试LocalDate 常用API * @author: zongf * @date: 2018-06-29 13:19 */
public class TestLocalDate {
//测试构造方法
@Test
public void constructor(){
// 获取当前日期
LocalDate ld1 = LocalDate.now(); //2018-06-29
// 根据指定年月日获取日期
LocalDate ld2 = LocalDate.of(2018, 06, 29);
// 根据字符串解析日期
LocalDate ld5 = LocalDate.parse("2018-06-29");
// 指定日期格式解析字符串
LocalDate ld6 = LocalDate.parse("29/06/2018", DateTimeFormatter.ofPattern("dd/MM/yyyy"));
// 获取某个时区的日期,下午13:36 测试时比北京日期晚一天
LocalDate ld7 = LocalDate.now(ZoneId.of("US/Pacific")); // 2018-06-28
// 获取某年的第几天的日期
LocalDate ld4 = LocalDate.ofYearDay(2018, 100);
// 获取Unix 元年(1970-01-01) 之后的第几天
LocalDate ld3 = LocalDate.ofEpochDay(100);
System.out.println(ld1);
System.out.println(ld2);
System.out.println(ld3);
System.out.println(ld4);
System.out.println(ld5);
System.out.println(ld6);
System.out.println(ld7);
}
// 测试常用get 方法
@Test
public void test_get(){
LocalDate today = LocalDate.now();
System.out.println("年:" + today.getYear());
System.out.println("月:" + today.getMonthValue());
System.out.println("日:" + today.getDayOfMonth());
System.out.println("月份(英文):" + today.getMonth());
System.out.println("星期(英文):" + today.getDayOfWeek());
System.out.println("当月第几天:" + today.getDayOfMonth());
System.out.println("当年第几天:" + today.getDayOfYear());
System.out.println("Unix元年后第几天:" + today.toEpochDay());
System.out.println();
System.out.println("当月总天数:" + today.lengthOfMonth());
System.out.println("当年总天数:" + today.lengthOfYear());
System.out.println("是否是闰年:" + today.isLeapYear());
System.out.println();
// 更通用的方法
System.out.println("年:" + today.get(ChronoField.YEAR));
System.out.println("月:" + today.get(ChronoField.MONTH_OF_YEAR));
System.out.println("日:" + today.get(ChronoField.DAY_OF_MONTH));
System.out.println("本周第几天(数字):" + today.get(ChronoField.DAY_OF_WEEK));
System.out.println("当年第几天:" + today.get(ChronoField.DAY_OF_YEAR));
System.out.println("当月第几天%7:" + today.get(ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH));
System.out.println("当年第几天%7" + today.get(ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR));
System.out.println("当月第几周:" + today.get(ChronoField.ALIGNED_WEEK_OF_MONTH));
System.out.println("当年第几周:" + today.get(ChronoField.ALIGNED_WEEK_OF_YEAR));
System.out.println("Unix元年后第几天:" + today.getLong(ChronoField.EPOCH_DAY));
}
// 测试常用日期运算
@Test
public void test_plus(){
LocalDate today = LocalDate.now();
System.out.println("当前日期:" + today);
System.out.println();
// 使用plus 获取当前日期
System.out.println("三天后日期:" + today.plusDays(3));
System.out.println("三月后日期:" + today.plusMonths(3));
System.out.println("三周后日期:" + today.plusWeeks(3));
System.out.println("三年后日期:" + today.plusYears(3));
System.out.println();
System.out.println("三天前日期:" + today.minusDays(3));
System.out.println("三月前日期:" + today.minusMonths(3));
System.out.println("三周前日期:" + today.minusWeeks(3));
System.out.println("三年前日期:" + today.minusYears(3));
System.out.println();
System.out.println("三天前日期:" + today.minus(Period.ofDays(3)));
System.out.println("三月前日期:" + today.minus(Period.ofMonths(3)));
System.out.println("三年前日期:" + today.minus(Period.ofYears(3)));
System.out.println("三周前日期:" + today.minus(Period.ofWeeks(3)));
System.out.println("三年零三个月又三天前日期:" + today.minus(Period.of(3,3,3)));
System.out.println();
System.out.println("三天后日期:" + today.plus(Period.ofDays(3)));
System.out.println("三月后日期:" + today.plus(Period.ofMonths(3)));
System.out.println("三年后日期:" + today.plus(Period.ofYears(3)));
System.out.println("三周后日期:" + today.plus(Period.ofWeeks(3)));
System.out.println("三年零三个月又三天后日期:" + today.plus(Period.of(3,3,3)));
}
// 测试日期比较
@Test
public void test_compare(){
LocalDate today = LocalDate.now();
LocalDate tomorrow = LocalDate.now().plusYears(1);
LocalDate yesterday = LocalDate.now().minusYears(1);
System.out.println(today.isBefore(tomorrow));
System.out.println(today.isAfter(tomorrow));
System.out.println(today.compareTo(yesterday));
System.out.println(yesterday.compareTo(tomorrow));
}
// 使用with 方法获取和当前日期相关的日期
@Test
public void with(){
LocalDate ld = LocalDate.now();
System.out.println("当期日期:" + ld);
System.out.println("替换年为2020:" + ld.withYear(2020));
System.out.println("替换月为5:" + ld.withMonth(5));
System.out.println("替换日为15:" + ld.withDayOfMonth(15));
System.out.println("替换为当年第100天:" + ld.withDayOfYear(100));
System.out.println();
System.out.println("获取当月第一天:" + ld.with(TemporalAdjusters.firstDayOfMonth()));
System.out.println("获取当年第一天:" + ld.with(TemporalAdjusters.firstDayOfYear()));
System.out.println("获取下月第一天:" + ld.with(TemporalAdjusters.firstDayOfNextMonth()));
System.out.println("获取来年第一天:" + ld.with(TemporalAdjusters.firstDayOfNextYear()));
System.out.println("获取当年最后一天:" + ld.with(TemporalAdjusters.lastDayOfYear()));
System.out.println("获取当月最后一天:" + ld.with(TemporalAdjusters.lastDayOfMonth()));
System.out.println("获取当月第一个周五:" + ld.with(TemporalAdjusters.firstInMonth(DayOfWeek.FRIDAY)));
System.out.println("获取当月最后一个周五:" + ld.with(TemporalAdjusters.lastInMonth(DayOfWeek.FRIDAY)));
System.out.println("获取当月下一个周五(不包括今天):" + ld.with(TemporalAdjusters.next(DayOfWeek.FRIDAY)));
System.out.println("获取当月下一个周五(包括今天):" + ld.with(TemporalAdjusters.nextOrSame(DayOfWeek.FRIDAY)));
System.out.println("获取当月上一个周五(不包括今天):" + ld.with(TemporalAdjusters.previous(DayOfWeek.FRIDAY)));
System.out.println("获取当月上一个周五(包括今天):" + ld.with(TemporalAdjusters.previousOrSame(DayOfWeek.FRIDAY)));
// 自定义TemporalAdjuster 对象,实现下一个工作日
TemporalAdjuster nextWorkingDay = TemporalAdjusters.ofDateAdjuster(
temporal -> {
DayOfWeek dow = DayOfWeek.of(temporal.get(ChronoField.DAY_OF_WEEK));
int dayToAdd = 1;
if(dow==DayOfWeek.FRIDAY) dayToAdd = 3;
if(dow==DayOfWeek.SATURDAY) dayToAdd = 2;
return temporal.plus(dayToAdd, ChronoUnit.DAYS);
}
);
System.out.println("获取下一个工作日:" + ld.with(nextWorkingDay));
}
// 计算两个时间之间的差
@Test
public void test_until(){
LocalDate ld1 = LocalDate.of(2005, 9, 30);
LocalDate ld2 = LocalDate.of(2018, 3, 10);
System.out.println("日期间隔-总年数:" + ld1.until(ld2, ChronoUnit.YEARS));
System.out.println("日期间隔-总月数:" + ld1.until(ld2, ChronoUnit.MONTHS));
System.out.println("日期间隔-总天数:" + ld1.until(ld2, ChronoUnit.DAYS));
System.out.println("时间间隔-多少个十年:" + ld1.until(ld2, ChronoUnit.DECADES));
}
// 测试日期直接的间隔
@Test
public void test_between(){
LocalDate ld1 = LocalDate.of(2015, 8, 28);
LocalDate ld2 = LocalDate.of(2018, 3, 10);
// 计算日期之间相差总时间数
Period period = Period.between(ld1, ld2);
// Period period = ld1.until(ld2); // 等价于
System.out.println("日期间隔:" + period);
System.out.println("日期间隔-年:" + period.getYears());
System.out.println("日期间隔-月:" + period.getMonths());
System.out.println("日期间隔-日:" + period.getDays());
System.out.println("日期间隔-总月数:" + period.toTotalMonths());
System.out.println("日期间隔-年:" + period.get(ChronoUnit.DAYS));
System.out.println("日期间隔-月:" + period.get(ChronoUnit.MONTHS));
System.out.println("日期间隔-日:" + period.get(ChronoUnit.YEARS));
System.out.println("日期间隔是否是负数:" + period.isNegative());
System.out.println("日期间隔是否是0:" + period.isZero());
}
// 测试日期转换
@Test
public void test_converter(){
LocalDate ld = LocalDate.now();
// 获取当天开始时间
LocalDateTime ldt1 = ld.atStartOfDay();
System.out.println(ldt1);
// 获取指定时区当天开始时间
ZonedDateTime zonedDateTime = ld.atStartOfDay(ZoneId.of("US/Pacific"));
System.out.println(zonedDateTime); //2018-06-30T00:00-07:00[US/Pacific]
// 获取当天具体时间
LocalDateTime ldt2 = ld.atTime(8, 20, 30);
System.out.println(ldt2);
// 获取当天具体时间
LocalDateTime ldt3 = ld.atTime(LocalTime.of(8, 20, 30));
System.out.println(ldt3);
}
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://zongf.blog.csdn.net/article/details/90057737
内容来源于网络,如有侵权,请联系作者删除!