java8部分时间API测试
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.format.FormatStyle;
import java.time.format.TextStyle;
import java.time.temporal.*;
import java.util.Locale;
@RunWith(JUnit4.class)
public class JDK8TimeTest {
@Test
public void testChrono(){
LocalDate now = LocalDate.now();
System.out.println(now.getEra());
System.out.println(now.getYear());
System.out.println(now.get(ChronoField.YEAR));
System.out.println(now.isSupported(ChronoField.HOUR_OF_DAY));
System.out.println(ChronoField.YEAR.isSupportedBy(now));
LocalDate date = now.minus(5, ChronoUnit.DAYS);
System.out.println(date);
}
@Test
public void testTemporalAdjuster(){
LocalDate today = LocalDate.of(2016, Month.JANUARY, 1);
LocalDate date = today.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
System.out.println("2016.1.1以后的下个星期一:"+date);
System.out.println("today的下一年的第一天:"+today.with(TemporalAdjusters.firstDayOfNextYear()));
System.out.println("today变量的本月最后一个星期天:"+today.with(TemporalAdjusters.lastInMonth(DayOfWeek.SUNDAY)));
System.out.println("today变量前一个星期一:"+today.with(TemporalAdjusters.previous(DayOfWeek.MONDAY)));
System.out.println("today变量后的第四个星期一:"+today.with(TemporalAdjusters.dayOfWeekInMonth(4,DayOfWeek.MONDAY)));
System.out.println("指定today变量的具体某一天:"+today.withDayOfMonth(12));
}
@Test
public void testTemporalQuery(){
TemporalQuery<TemporalUnit> precision = TemporalQueries.precision();
TemporalQuery<LocalDate> localDate = TemporalQueries.localDate();
LocalDate today = LocalDate.now();
System.out.println("today的精确单位是:"+precision.queryFrom(today));
System.out.println("today的精确单位是:"+today.query(precision));
System.out.println(today.query(localDate));
LocalDateTime time = LocalDateTime.now();
System.out.println("通过precision确定time变量的精确单位:"+precision.queryFrom(time));
System.out.println("time的query方法自己确定自己的精确单位:"+time.query(precision));
LocalTime lt = LocalTime.now();
System.out.println(lt.query(precision));
System.out.println(lt.query(localDate));
ZonedDateTime ldt = ZonedDateTime.now();
System.out.println(ldt.query(precision));
System.out.println(ldt.query(localDate));
}
@Test
public void testPredefinedFormatter(){
DateTimeFormatter dateTime = DateTimeFormatter.ISO_DATE_TIME;
System.out.println("LocalDateTime"+dateTime.format(LocalDateTime.now()));
DateTimeFormatter date = DateTimeFormatter.ISO_DATE;
System.out.println("LocalDate"+date.format(LocalDate.now()));
System.out.println("ZonedDateTime"+dateTime.format(ZonedDateTime.now()));
System.out.println("ZonedDateTime"+date.format(ZonedDateTime.now()));
}
@Test
public void testCustomFormatter(){
DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
System.out.println("yyyy-MM-dd HH:mm:ss:"+f.format(LocalDateTime.now()));
DateTimeFormatter f2 = DateTimeFormatter.ofPattern("dd/MM yyyy", Locale.US);
System.out.println("指定语言环境:"+f2.format(LocalDateTime.now()));
DateTimeFormatter f3 = f2.withLocale(Locale.CHINA);
System.out.println("更改后的语言环境是:"+f3.getLocale()+",Zone是:"+f3.getZone()+",格式化后的时间是:"+f3.format(LocalDateTime.now()));
DateTimeFormatter f4 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
ZoneId z = ZoneId.of("America/Chicago");
ZonedDateTime zdt = ZonedDateTime.of(LocalDateTime.now(), z);
System.out.println("将美国芝加哥时间指定为本地时间:"+f4.format(zdt));
ZonedDateTime america = ZonedDateTime.now(z);
System.out.println("美国芝加哥时间现在是:"+f4.format(america));
String s = new DateTimeFormatterBuilder().appendLiteral("New year in ").appendValue(ChronoField.YEAR).
appendLiteral(" is on ").appendText(ChronoField.DAY_OF_WEEK, TextStyle.FULL_STANDALONE).toFormatter(Locale.CHINA)
.format(LocalDateTime.now());
System.out.println("自建Formatter对象格式化:"+s);
}
@Test
public void testAssignArea(){
LocalDate ld = LocalDate.now();
LocalTime lt = LocalTime.now();
LocalDateTime ldt = LocalDateTime.of(ld, lt);
DateTimeFormatter sfd = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT);
DateTimeFormatter mfd = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM);
DateTimeFormatter lfd = DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG);
DateTimeFormatter ffd = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL);
DateTimeFormatter sft = DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT);
DateTimeFormatter mft = DateTimeFormatter.ofLocalizedTime(FormatStyle.MEDIUM);
DateTimeFormatter lft = DateTimeFormatter.ofLocalizedTime(FormatStyle.LONG);
DateTimeFormatter fft = DateTimeFormatter.ofLocalizedTime(FormatStyle.FULL);
DateTimeFormatter sfdt = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT).withLocale(Locale.US);
DateTimeFormatter mfdt = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM).withLocale(Locale.US);
DateTimeFormatter lfdt = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG).withLocale(Locale.US);
DateTimeFormatter ffdt = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL).withLocale(Locale.US);
System.out.println("日期语言环境为中国:");
System.out.println(sfd.format(ld));
System.out.println(mfd.format(ld));
System.out.println(lfd.format(ld));
System.out.println(ffd.format(ld));
System.out.println("日期语言环境为美国:");
System.out.println(sfd.withLocale(Locale.US).format(ld));
System.out.println(mfd.withLocale(Locale.US).format(ld));
System.out.println(lfd.withLocale(Locale.US).format(ld));
System.out.println(ffd.withLocale(Locale.US).format(ld));
System.out.println("DateTime语言环境为美国:");
System.out.println(sfdt.format(ldt));
System.out.println(mfdt.format(ldt));
System.out.println("DateTime语言环境为中国:");
System.out.println(sfdt.withLocale(Locale.CHINA).format(ldt));
System.out.println(mfdt.withLocale(Locale.CHINA).format(ldt));
System.out.println(lfdt.withLocale(Locale.CHINA).format(ldt));
System.out.println("Time语言环境为中国");
System.out.println(sft.format(lt));
System.out.println(mft.format(lt));
System.out.println(lft.format(lt));
System.out.println("Time语言环境为美国");
System.out.println(sft.withLocale(Locale.US).format(lt));
System.out.println(mft.withLocale(Locale.US).format(lt));
}
@Test
public void parseDateFromFormatter(){
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime localDateTime = LocalDateTime.parse("2017-05-05 10:33:25", formatter);
System.out.println(localDateTime);
System.out.println(localDateTime.from(localDateTime));
System.out.println(localDateTime.parse("2017-05-05T10:33:25"));
TemporalAccessor parse = formatter.parse("2016-05-05 10:33:25");
System.out.println(LocalDateTime.from(parse));
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
TemporalAccessor parse1 = dateFormatter.parse("2017-02-02");
System.out.println(LocalDate.from(parse1));
System.out.println(LocalDate.parse("2017-02-02", dateFormatter));
}
}