package com.atguigu.java8
import java.text.SimpleDateFormat
import java.time.LocalDate
import java.time.format.DateTimeFormatter
import java.util.ArrayList
import java.util.Date
import java.util.List
import java.util.concurrent.Callable
import java.util.concurrent.ExecutionException
import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors
import java.util.concurrent.Future
public class TestSimpleDateFormat {
public static void main(String[] args) throws Exception {
//解决多线程安全问题
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMdd")
Callable<LocalDate> task = new Callable<LocalDate>() {
@Override
public LocalDate call() throws Exception {
LocalDate ld = LocalDate.parse("20161121", dtf)
return ld
}
}
ExecutorService pool = Executors.newFixedThreadPool(10)
List<Future<LocalDate>> results = new ArrayList<>()
for (int i = 0
results.add(pool.submit(task))
}
for (Future<LocalDate> future : results) {
System.out.println(future.get())
}
pool.shutdown()
}
}
package com.atguigu.java8;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFormatThreadLocal {
private static final ThreadLocal<DateFormat> df = new ThreadLocal<DateFormat>(){
protected DateFormat initialValue(){
return new SimpleDateFormat("yyyyMMdd");
}
};
public static final Date convert(String source) throws ParseException{
return df.get().parse(source);
}
}
package com.atguigu.java8
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
public class TestLocalDateTime {
//6.ZonedDate、ZonedTime、ZonedDateTime : 带时区的时间或日期
@Test
public void test7(){
LocalDateTime ldt = LocalDateTime.now(ZoneId.of("Asia/Shanghai"))
System.out.println(ldt)
ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("US/Pacific"))
System.out.println(zdt)
}
@Test
public void test6(){
Set<String> set = ZoneId.getAvailableZoneIds()
set.forEach(System.out::println)
}
//5. DateTimeFormatter : 解析和格式化日期或时间
@Test
public void test5(){
// DateTimeFormatter dtf = DateTimeFormatter.ISO_LOCAL_DATE
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss E")
LocalDateTime ldt = LocalDateTime.now()
String strDate = ldt.format(dtf)
System.out.println(strDate)
LocalDateTime newLdt = ldt.parse(strDate, dtf)
System.out.println(newLdt)
}
//4. TemporalAdjuster : 时间校正器
@Test
public void test4(){
LocalDateTime ldt = LocalDateTime.now()
System.out.println(ldt)
LocalDateTime ldt2 = ldt.withDayOfMonth(10)
System.out.println(ldt2)
LocalDateTime ldt3 = ldt.with(TemporalAdjusters.next(DayOfWeek.SUNDAY))
System.out.println(ldt3)
//自定义:下一个工作日
LocalDateTime ldt5 = ldt.with((l) -> {
LocalDateTime ldt4 = (LocalDateTime) l
DayOfWeek dow = ldt4.getDayOfWeek()
if(dow.equals(DayOfWeek.FRIDAY)){
return ldt4.plusDays(3)
}else if(dow.equals(DayOfWeek.SATURDAY)){
return ldt4.plusDays(2)
}else{
return ldt4.plusDays(1)
}
})
System.out.println(ldt5)
}
//3.
//Duration : 用于计算两个“时间”间隔
//Period : 用于计算两个“日期”间隔
@Test
public void test3(){
Instant ins1 = Instant.now()
System.out.println("--------------------")
try {
Thread.sleep(1000)
} catch (InterruptedException e) {
}
Instant ins2 = Instant.now()
System.out.println("所耗费时间为:" + Duration.between(ins1, ins2))
System.out.println("----------------------------------")
LocalDate ld1 = LocalDate.now()
LocalDate ld2 = LocalDate.of(2011, 1, 1)
Period pe = Period.between(ld2, ld1)
System.out.println(pe.getYears())
System.out.println(pe.getMonths())
System.out.println(pe.getDays())
}
//2. Instant : 时间戳。 (使用 Unix 元年 1970年1月1日 00:00:00 所经历的毫秒值)
@Test
public void test2(){
Instant ins = Instant.now()
System.out.println(ins)
OffsetDateTime odt = ins.atOffset(ZoneOffset.ofHours(8))
System.out.println(odt)
System.out.println(ins.getNano())
Instant ins2 = Instant.ofEpochSecond(5)
System.out.println(ins2)
}
//1. LocalDate、LocalTime、LocalDateTime
@Test
public void test1(){
LocalDateTime ldt = LocalDateTime.now()
System.out.println(ldt)
LocalDateTime ld2 = LocalDateTime.of(2016, 11, 21, 10, 10, 10)
System.out.println(ld2)
LocalDateTime ldt3 = ld2.plusYears(20)
System.out.println(ldt3)
LocalDateTime ldt4 = ld2.minusMonths(2)
System.out.println(ldt4)
System.out.println(ldt.getYear())
System.out.println(ldt.getMonthValue())
System.out.println(ldt.getDayOfMonth())
System.out.println(ldt.getHour())
System.out.println(ldt.getMinute())
System.out.println(ldt.getSecond())
}
}