import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* create gl
**/
public class DateFormatTheradLocal {
private static final ThreadLocal<DateFormat> df = new ThreadLocal<DateFormat>(){
@Override
protected DateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd");
}
};
public static Date convert(String str) throws ParseException {
return df.get().parse(str);
}
}
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.*;
/**
* create gl
* 传统解决时间方式
**/
public class TestTime01 {
// 存在线程安全问题
public static void test1() throws ExecutionException, InterruptedException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-ddd");
ExecutorService executorService = Executors.newFixedThreadPool(10);
Callable<Date> task = new Callable() {
@Override
public Object call() throws Exception {
return simpleDateFormat.parse("2018-06-28");
}
};
List<Future<Date>> futureList = new ArrayList<>();
for (int i = 0; i <10 ; i++) {
futureList.add(executorService.submit(task));
}
for (Future<Date> future : futureList) {
System.out.println(future.get());
}
}
public static void test2() throws ExecutionException, InterruptedException {
ExecutorService executorService = Executors.newFixedThreadPool(10);
Callable<Date> task = new Callable() {
@Override
public Object call() throws Exception {
return DateFormatTheradLocal.convert("2018-06-28");
}
};
List<Future<Date>> futureList = new ArrayList<>();
for (int i = 0; i <10 ; i++) {
futureList.add(executorService.submit(task));
}
for (Future<Date> future : futureList) {
System.out.println(future.get());
}
executorService.shutdown();
}
// java8 新的api 线程安全的
public static void main(String[] args) throws ExecutionException, InterruptedException {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
ExecutorService executorService = Executors.newFixedThreadPool(10);
Callable<LocalDate> task = new Callable() {
@Override
public Object call() throws Exception {
return LocalDate.parse("2018-06-28",dateTimeFormatter);
}
};
List<Future<LocalDate>> futureList = new ArrayList<>();
for (int i = 0; i <10 ; i++) {
futureList.add(executorService.submit(task));
}
for (Future<LocalDate> future : futureList) {
System.out.println(future.get());
}
executorService.shutdown();
}
}
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.Set;
/**
* create gl
**/
public class TestLocalDateTime {
// LocalDate LocalTime LocalDateTime
public static void test(){
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
System.out.println(localDateTime.getYear()); // 年
System.out.println(localDateTime.getSecond()); // 秒
System.out.println(localDateTime.getMonthValue()); //月 中文
System.out.println(localDateTime.getMonth()); // 月 英文
System.out.println(localDateTime.getMinute()); // 分
System.out.println(localDateTime.getHour()); // 小时
System.out.println(localDateTime.getNano()); // 纳秒
System.out.println(localDateTime.getDayOfYear());
System.out.println(localDateTime.getDayOfWeek()); // 星期
System.out.println(localDateTime.getDayOfMonth()); // 日
System.out.println("-------------------------------");
LocalDateTime localDateTime1 = LocalDateTime.of(2900,10,20,22,12,30);
System.out.println("-------------------------------");
// 对时间做一些操作
// plus... 加 ; minus... 减
LocalDateTime localDateTime2 = localDateTime.plusYears(2);
System.out.println(localDateTime2);
}
// Instant 时间戳 以Unix元年 1970年1月日 00:00:00 之间的毫秒值
public static void test1(){
Instant instant = Instant.now(); // 默认获取的UTC时区
System.out.println(instant);
OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8)); // 偏移量
System.out.println(offsetDateTime); // 转为对应的毫秒值
System.out.println(instant.toEpochMilli()); // 转为对应的毫秒值
Instant ofEpochSecond = Instant.ofEpochSecond(1000); // 1970年1月日 00:00:00 加上这个秒数
System.out.println(ofEpochSecond);
}
/**
* Duration 计算两个时间之间的间隔
* Period 计算两个日期之间的间隔
*
*/
public static void test2() throws InterruptedException {
Instant instant = Instant.now();
Thread.sleep(1000);
Instant instant1 = Instant.now();
Duration between = Duration.between(instant, instant1);
System.out.println(between.getSeconds());
System.out.println(between.toMillis()); // to... 方法
System.out.println("-----------------------------------");
LocalTime cl = LocalTime.now();
Thread.sleep(1000);
LocalTime cl2 = LocalTime.now();
Duration between1 = Duration.between(cl, cl2);
System.out.println(between1.toNanos());
}
public static void test3(){
LocalDate localDate = LocalDate.of(2016,10,10);
LocalDate localDate1 = LocalDate.now();
Period between = Period.between(localDate, localDate1);
System.out.println(between);
System.out.println(between.getYears());
System.out.println(between.getMonths());
System.out.println(between.getDays());
}
/**
* TemporalAdjuster 时间矫正器
*
*/
public static void test4(){
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
LocalDateTime withDayOfMonth = localDateTime.withDayOfMonth(10);// with... 系列方法
System.out.println(withDayOfMonth);
LocalDateTime with = localDateTime.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)); // 下个周日是什么时候
System.out.println(with);
// 自定义, 下一个工作日
LocalDateTime localDateTime1 = localDateTime.with(x -> {
LocalDateTime ld4 = (LocalDateTime) x; // x 参数是 Temporal
DayOfWeek dayOfWeek = ld4.getDayOfWeek();
if (dayOfWeek.equals(DayOfWeek.FRIDAY)) { // 如果是周五
return ld4.plusDays(3);
} else if (dayOfWeek.equals(DayOfWeek.SATURDAY)) { // 如果是周六
return ld4.plusDays(2);
} else {
return ld4.plusDays(1);
}
});
System.out.println(localDateTime1);
}
/**
* 时间格式化
*/
public static void test5(){
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ISO_DATE;
LocalDateTime ldt = LocalDateTime.now();
String date = ldt.format(dateTimeFormatter);
System.out.println(date);
System.out.println("--------------------------------------------");
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String format = timeFormatter.format(ldt);
System.out.println(format);
System.out.println("--------------------------------------------");
LocalDateTime parse = LocalDateTime.parse(format,timeFormatter);
System.out.println(parse);
}
/**
* 带时区的 时间 ZonedDate,ZonedTime,ZonedDateTime
*/
public static void test6(){
Set<String> zoneIds = ZoneId.getAvailableZoneIds(); // 支持的地区
// zoneIds.forEach(System.out::println);
System.out.println("---------------------------------------");
LocalDateTime localDateTime = LocalDateTime.now(ZoneId.of("Europe/Belgrade"));
System.out.println(localDateTime);
ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.of("Europe/Belgrade"));
System.out.println(zonedDateTime); // + ... 与 UTC相比 差多少时差
}
public static void main(String[] args) throws InterruptedException {
// test();
// test1();
// test2();
// test3();
// test4();
// test5();
test6();
}
}