/**
* TestLocalDateTime.java
* com.javabase.test17
* 本文转载自 尚硅谷视频中教学代码 http://www.gulixueyuan.com/my/course/56 第十八 十九讲
*/
package com.javabase.test17;
import java.time.DayOfWeek;
import java.time.Duration;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.Period;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.Set;
import org.junit.Test;
/**
* java 8 对于日期和时间的使用
*
* @author Chufanzgheng(1280251739@qq.com)
* @Date 2018年1月24日
*/
public class TestLocalDateTime {
/**
* localDate The operation of time
*/
@Test
public void test1(){
LocalDateTime localDateTime = LocalDateTime.now();
System.out.print("++++【localDateTime】++++"+localDateTime);
// -------iso 标准时间体系-------
LocalDateTime localDateTime1 = LocalDateTime.of(2018, 1, 24, 9, 46);
System.out.println("++++++【localDateTime1】+++++"+localDateTime1);
LocalDateTime localDateTime2 = localDateTime1.minusDays(20);
System.out.println("+++++++【localDateTime2】+++++++"+localDateTime2);
System.out.println("+++++++【localDateTime2.plusMonths(2)】+++++++++"+localDateTime2.plusMonths(2));
System.out.println("localDateTime2.getYear()"+localDateTime2.getYear());
System.out.println("localDateTime2.getMonthValue()"+localDateTime2.getMonthValue());
System.out.println("localDateTime2.getMonth()"+localDateTime2.getMonth());
System.out.println("localDateTime2.getDayOfWeek()"+localDateTime2.getDayOfWeek());
System.out.println("localDateTime2.getDayOfMonth()"+localDateTime2.getDayOfMonth());
System.out.println("localDateTime2.getHour()"+localDateTime2.getHour());
System.out.println("localDateTime2.getMinute()"+localDateTime2.getMinute());
System.out.println("localDateTime2.getSecond()"+localDateTime2.getSecond());
}
//2. Instant : 时间戳。 (使用 Unix 元年 1970年1月1日 00:00:00 所经历的毫秒值)
@Test
public void test2(){
Instant ins = Instant.now(); //默认使用 UTC 时区
System.out.println(ins);
//偏移时区调整
OffsetDateTime odt = ins.atOffset(ZoneOffset.ofHours(8)); // 时间偏移量8个小时
System.out.println(odt);
System.out.println("++++ins.getNano()++++"+ins.getNano());
Instant ins2 = Instant.ofEpochSecond(5);
System.out.println("++++ins2++++"+ins2);
}
/**
* 计算时间间隔 Duration Period
* @throws InterruptedException
* toMillis()
*
*/
@Test
public void test3() throws InterruptedException{
Instant instantBegin = Instant.now();
Thread.sleep(2000);
Instant instantEnd = Instant.now();
System.out.println("输出当前时间间隔差"+Duration.between(instantBegin, instantEnd).toMillis());
// -----------------------------------------------------------------------
LocalDate local1 = LocalDate.now();
LocalDate local2 = LocalDate.of(2016, 7, 24);
Period period = Period.between(local1, local2);
System.out.println("++++year++++"+period.getYears());
System.out.println("++++month++++"+period.getMonths());
System.out.println("++++days++++"+period.getDays());
}
/**
* 时间校正器
* TemporalAdjuster
*/
@Test
public void test4(){
LocalDateTime ldt = LocalDateTime.now();
System.out.println("-----ldt-----"+ldt);
LocalDateTime ldt2 = ldt.withDayOfMonth(30);//表示为本月中的第几天
System.out.println("----ldt2----"+ldt2);
//计算下周一的时间
LocalDateTime ldt3 = ldt.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
System.out.println("------ldt3-----"+ldt3);
//自定义:下一个工作日
LocalDateTime ldt4 = ldt.with((local) ->{
LocalDateTime ldt5 = (LocalDateTime) local;
DayOfWeek dow = ldt5.getDayOfWeek();
if(dow.equals(DayOfWeek.FRIDAY)){
return ldt5.plusDays(3);
}else if(dow.equals(DayOfWeek.SATURDAY)){
return ldt5.plusDays(2);
}else{
return ldt5.plusDays(1);
}
});
System.out.println("-------ldt4-----"+ldt4);
}
/**
* 5. DateTimeFormatter : 解析和格式化日期或时间
*/
@Test
public void test5(){
DateTimeFormatter dateTimeFormater = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒");
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println("【----未格式化之前----】" + localDateTime);
System.out.println("【----格式化之后----】"+dateTimeFormater.format(localDateTime));
}
@Test
public void test6(){
Set<String> set = ZoneId.getAvailableZoneIds();
set.forEach(System.out::println);
}
/**
* 7.ZonedDate、ZonedTime、ZonedDateTime : 带时区的时间或日期
*/
@Test
public void test7(){
LocalDateTime ldt = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
System.out.println("----【ldt】----"+ldt);
ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("America/New_York"));
System.out.println("----【zdt】----"+zdt);
}
/**
* <B>备注:<B>
*
* zone 英[zəʊn]美[zoʊn]n.地带; 区域,范围; 地区,时区; [物] 晶带;vt. 划分成带; 用带子围绕;vi. 分成区,分成地带;
*
* available 英[əˈveɪləbl]美[əˈveləbəl]adj. 可获得的; 有空的; 可购得的; 能找到的;
*
* offset 美[ˈɔ:fset]vt. 抵消; 补偿; (为了比较的目的而)把…并列(或并置) ;
* 为(管道等)装支管;vi. 形成分支,长出分枝; 装支管;n. 开端; 出发; 平版印刷; 抵消,补偿;
*
* duration 美[duˈreɪʃn] n. 持续,持续的时间,期间; (时间的) 持续,持久,连续; [语音学] 音长,音延;
*
* instant 英[ˈɪnstənt] 美[ˈɪnstənt] n. 瞬间,顷刻; 此刻; 当月; 速食食品,即溶饮料; adj. 立即的; 迫切的; 正在考虑的,目前的; 即食的;
*
* temporal 英[ˈtempərəl] 美[ˈtɛmpərəl,ˈtɛmprəl] adj.时间的; 世俗的; 暂存的; <语>表示时间的; n.暂存的事物,世间的事物; 世俗的权力; 一时的事物,俗事;
*
* adjuster 英[ə'dʒʌstə] 美[ə'dʒʌstə] n.调停者,调节器;
*
*/
}