java8新的时间工具测试
java8引入了一套全新的时间日期API,本篇随笔将说明学习java8的这套API。
java。time包中的是类是不可变且线程安全的。新的时间及日期API位于java.time中,下面是一些关键类
-
Instant——它代表的是时间戳
-
LocalDate——不包含具体时间的日期,比如2014-01-14。它可以用来存储生日,周年纪念日,入职日期等。
-
LocalTime——它代表的是不含日期的时间
-
LocalDateTime——它包含了日期及时间,不过还是没有偏移信息或者说时区。
-
ZonedDateTime——这是一个包含时区的完整的日期时间,偏移量是以UTC/格林威治时间为基准的。
package java8chaptertwelfth;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoField;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
/**
* 描述:java8时间测试
* Created by zjw on 2017/9/5.
*/
public class Java8DateTest {
public static void main(String[] args) throws Exception {
System.out.println("当前日期" + LocalDateTime.now());
System.out.println("当前时间去除T和毫秒数" + LocalDateTime.now().withNano(0).toString().replaceAll("T", " "));
System.out.println("创建时间" + LocalDate.of(2014, 12, 25));
System.out.println("根据自定义格式创建时间" + LocalDate.parse("14-2-20", DateTimeFormatter.ofPattern("yy-M-d")));
System.out.println("创建固定格式时间" + LocalDate.parse("2014-02-28"));
LocalDate today = LocalDate.now();
System.out.println("当前日期" + today);
System.out.println("本月的第一天" + today.with(TemporalAdjusters.firstDayOfMonth()));
System.out.println("本月的第二天" + today.withDayOfMonth(2));
LocalDate lastDayOfThisMonth = today.with(TemporalAdjusters.lastDayOfMonth());
System.out.println("本月的最后一天" + lastDayOfThisMonth);
System.out.println("本年的最后一天" + today.with(TemporalAdjusters.lastDayOfYear()));
System.out.println("本月最后一天再后一天的日期" + lastDayOfThisMonth.plusDays(1));
// 取2015年1月最后一个周一的日期,这个计算用Calendar要死掉很多脑细胞:
System.out.println(LocalDate.parse("2015-01-01").with(TemporalAdjusters.lastInMonth(DayOfWeek.MONDAY)));
LocalTime t1 = LocalTime.of(9, 50, 12);
LocalTime t2 = LocalTime.parse("23:58:59.675", DateTimeFormatter.ISO_LOCAL_TIME);
System.out.println("自定义time" + t1);
System.out.println("根据字符串自定义生成时间带毫秒数" + t2);
LocalDate date1 = LocalDate.of(2014, 3, 18);
System.out.println(date1);
LocalDate date2 = date1.withYear(2011);
System.out.println(date2);
LocalDate date3 = date2.withDayOfMonth(25);
System.out.println(date3);
LocalDate date4 = date3.with(ChronoField.YEAR_OF_ERA, 2017);
System.out.println(date4);
System.out.println(date4.plus(1L, ChronoUnit.MONTHS));
LocalDate date = LocalDate.of(2014, 3, 18);
date = date.with(ChronoField.MONTH_OF_YEAR, 10);
date = date.plusYears(3).plusDays(12);
date.withYear(2011);
System.out.println(date);
System.out.println("本月的第三个周日的日期" + date.with(TemporalAdjusters.dayOfWeekInMonth(3, DayOfWeek.SUNDAY)));
System.out.println("本月的第一个周日" + date.with(TemporalAdjusters.firstInMonth(DayOfWeek.SUNDAY)));
String authors = String.join(", ","Jarvan","Medusa");
System.out.println(authors);
LocalDate localDate = LocalDate.of(2014, 3, 18);
localDate = localDate.with(ChronoField.MONTH_OF_YEAR, 10);
localDate = localDate.plusYears(3).plusDays(12);
localDate.withYear(2011);
System.out.println(localDate);
System.out.println("本月的第三个周日的日期" + localDate.with(TemporalAdjusters.dayOfWeekInMonth(3, DayOfWeek.SUNDAY)));
System.out.println("本月的第一个周日" + localDate.with(TemporalAdjusters.firstInMonth(DayOfWeek.SUNDAY)));
System.out.println(LocalDate.of(2017, 10, 3).with(TemporalAdjusters.previousOrSame(DayOfWeek.TUESDAY)));
LocalDate now = LocalDate.now();
System.out.println("格式化" + now.format(DateTimeFormatter.ISO_LOCAL_DATE) + "\n");
System.out.println("明天的日期" + LocalDate.now().with(temporal -> {
DayOfWeek dow = DayOfWeek.of(temporal.get(ChronoField.DAY_OF_WEEK));
int dayToAdd = 1;
if (dow == DayOfWeek.FRIDAY)
dayToAdd = 3;
else if (dow == DayOfWeek.SATURDAY)
dayToAdd = 2;
return temporal.plus(dayToAdd, ChronoUnit.DAYS);
}));
// Date date = new Date();
// Instant instant1 = date.toInstant();
// System.out.println("Date获取今天是几号:" + date.getDate());
//
// Calendar calendar = Calendar.getInstance();
// System.out.println("Calendar获取今天是几号:" + calendar.get(Calendar.DATE));
//
// Instant instant = Instant.now();
// System.out.println("instant当前时间带毫秒:" + instant);
//
// LocalDate localDate = LocalDate.now();
// System.out.println("当前日期:" + LocalDate.now());
// System.out.println("LocalTime当前时间带毫秒:" + LocalTime.now());
// System.out.println("当前日期加时间:" + LocalDateTime.now());
// System.out.println("当前时间去除T和毫秒数:" + LocalDateTime.now().withNano(0).toString().replaceAll("T", " "));
// System.out.println("创建时间:" + LocalDate.of(2014, 12, 25));
// System.out.println("根据自定义格式创建时间:" + LocalDate.parse("14-2-20", DateTimeFormatter.ofPattern("yy-M-d")));
// System.out.println("创建固定格式时间:" + LocalDate.parse("2014-02-28"));
// LocalDate today = LocalDate.now();
// System.out.println("当前日期:" + today);
// System.out.println("当前年是否是闰年:" + localDate.isLeapYear());
// System.out.println("本月的第一天:" + today.with(TemporalAdjusters.firstDayOfMonth()));
// System.out.println("本月的第二天:" + today.withDayOfMonth(2));
// LocalDate lastDayOfThisMonth = today.with(TemporalAdjusters.lastDayOfMonth());
// System.out.println("本月的最后一天:" + lastDayOfThisMonth);
// System.out.println("本年的最后一天:" + today.with(TemporalAdjusters.lastDayOfYear()));
// System.out.println("本月最后一天再后一天的日期:" + lastDayOfThisMonth.plusDays(1));
// // 取2015年1月最后一个周一的日期,这个计算用Calendar要死掉很多脑细胞:
// System.out.println("2015年1月最后一个周一的日期:" + LocalDate.parse("2015-01-01").with(TemporalAdjusters.lastInMonth(DayOfWeek.MONDAY)));
// LocalTime t1 = LocalTime.of(9, 50, 12);
// LocalTime t2 = LocalTime.parse("23:58:59.675", DateTimeFormatter.ISO_LOCAL_TIME);
// System.out.println("自定义time:" + t1);
// System.out.println("根据字符串自定义生成时间带毫秒数:" + t2);
}
}