Java8提供了一个新的日期类,是线程安全的。而且好多业务情况都有了具体的实现。直接贴代码了
/**
* 关于日期的一些业务常见的操作使用方式,以localDate为例.其余的localDateTime与之相似.
* <p>
* 全部日期的操作都得遵循ISO-8601(协调世界时).
*
* @author jxj
*
*/
public class DateTest2 {
@Test
public void dateTest() {
// 获取本地日期.
LocalDate ld = LocalDate.now();
System.out.println(ld);
// 获取某个时区的本地日期.
LocalDate ld1 = LocalDate.now(ZoneId.of("UTC"));
System.out.println(ld1);
// 将日期固定到某年某月某日.
LocalDate ld2 = LocalDate.of(1992, 5, 20);
System.out.println(ld2);
// 将日期固定到某个年月日(关于月份的话Java8中封装了一个Month类,可以去使用).
LocalDate ld3 = LocalDate.of(1992, Month.MAY, 20);
System.out.println(ld3);
// 固定日期的年份和具体日期.默认月份为一月份.
LocalDate ld4 = LocalDate.ofYearDay(2011, 3);
System.out.println(ld4);
// 将日期从1970-01-01开始,往前或者往后推多少天后的日期.
LocalDate ld5 = LocalDate.ofEpochDay(-31);
System.out.println(ld5);
// 严格按照ISO-8601的yyyy-MM-dd的方式去进行验证.(如果不足10,必须填充0.比如1999-2-2是不通过编译的)
LocalDate ld6 = LocalDate.parse("2009-09-09");
System.out.println(ld6);
/**
* 下边根据获取到的日期再做一系列的操作.
*/
// 获取某日期的开始时间.遵循ISO-8601.
LocalDateTime ldt = ld.atStartOfDay();
System.out.println(ldt);
// 将某个日期往前推多少天.
LocalDate ld7 = ld.minusDays(3);
System.out.println(ld7);
// 获取某个日期是周几.(返回值为DayOfWeek.和Month类的方法一致)
DayOfWeek dw = ld.getDayOfWeek();
System.out.println(dw);
// 获取本年到现在过了多少天.
int dy = ld.getDayOfYear();
System.out.println(dy);
// 获取本月这个日期到现在过了多少天.
int dm = ld.getDayOfMonth();
System.out.println(dm);
// 某个日期往后推多少天.
LocalDate ld8 = ld.plusDays(3);
System.out.println(ld8);
}
/**
* Date和localDate的相互转换.
*/
@Test
public void convertLocalDate() {
Date date = new Date();
System.out.println(date);
// 首先先将日期转为Instant类型
Instant is = date.toInstant();
System.out.println(is);
// 然后选择一个转换的时区
ZoneId zoneId = ZoneId.systemDefault();
System.out.println(zoneId);
LocalDate ld = is.atZone(zoneId).toLocalDate();
System.out.println(ld);
}
/**
* localDate转Date.
*/
@Test
public void convertDate() {
LocalDate ld = LocalDate.now();
ZoneId zoneId = ZoneId.systemDefault();
ZonedDateTime zdt = ld.atStartOfDay(zoneId);
Date date = Date.from(zdt.toInstant());
System.out.println(date);
}
}