java8之----time

java8对原来的时间API进行了规范

获取时间: 创建对象的方式都是静态方法

1、LocalDte LocalTime LocalDateTime 人看的
	LocalDateTime now = LocalDateTime.now(); //获取当前时间
	LocalDateTime localDateTime = now.plusDays(20); //当前时间加20天
	System.out.println(localDateTime);
	
	LocalDateTime dateTime = LocalDateTime.of(2015, 2, 12, 1, 2);//有多个重载方法
	System.out.println(dateTime);
2、Instant 时间戳 Unix元年 开始算的毫秒值
	Instant instant = Instant.now(); // 默认获取 UTC 时区 本初子午线时区
	OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8)); // 指定当前时区
	System.out.println(instant+"\t:\t"+offsetDateTime);
3、Duration: 计算两个“时间”之间的间隔
	Instant ins1 = Instant.now(); //获取时间戳
	
	try {
		Thread.sleep(1000);
	} catch (InterruptedException e) {
		e.printStackTrace();
	}
	Instant ins2 = Instant.now();
	System.out.println(Duration.between(ins1,ins2).toMillis()); //计算两个时间的 毫秒差
4、 Period 计算两个 日期 的间隔
	LocalDate of1 = LocalDate.of(2015, 1, 1);
	LocalDate of2 = LocalDate.of(2015, 10, 1);
	System.out.println(Period.between(of1,of2).getMonths()); // 计算两个日期相差多少月
5、TemporalAdjuster 时间矫正器 工具类TemporalAdjusters
	LocalDateTime localDateTime = LocalDateTime.now();
	System.out.println(localDateTime);
	
	LocalDateTime localDateTime1 = localDateTime.withDayOfMonth(3); //当前月的第三天
	System.out.println(localDateTime1);
	
	LocalDateTime with = localDateTime.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)); //下个周天
	System.out.println(with);
	
	//        自定义
	localDateTime.with((l)->{
		LocalDateTime ld4 = (LocalDateTime)l;
		DayOfWeek dayOfWeek = ld4.getDayOfWeek();
		if(dayOfWeek.equals(DayOfWeek.SATURDAY)){
			return ld4.plusDays(1);
		}
		return ld4.plusDays(5);
	});
6、DateTimeFormatter 时间格式化
	DateTimeFormatter ldf =  DateTimeFormatter.ISO_DATE; //格式化的格式
	
	LocalDateTime now = LocalDateTime.now();
	String format = now.format(ldf);
	System.out.println(format);
	//        指定自己的
	DateTimeFormatter ldf1 = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss"); 
	String format1 = now.format(ldf1);
	System.out.println(format1);
	LocalDateTime parse = now.parse(format1, ldf1);
	System.out.println(parse);
7、 时区的处理
LocalDateTime.now(ZoneId.of("Asia/Shanghai)) ; //指定时区 具体可直接查看源码
8、格式化为日期
//        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");  线程不安全
      /*  Callable<Date> task = new Callable<Date>() {
            @Override
            public Date call() throws Exception {
                return TestDateFormatThreadLocal.conver("20161218");
            }
        };
        ExecutorService pool = Executors.newFixedThreadPool(10);
        List<Future<Date>> futures = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            futures.add(pool.submit(task));
        }
        for(Future<Date> future :futures){
            System.out.println(future.get());
        }*/
      //1.8
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMdd"); //线程安全

        Callable<LocalDate> task = new Callable<LocalDate>() {
            @Override
            public LocalDate call() {
                return LocalDate.parse("20161218",dtf);
            }
        };
        ExecutorService pool = Executors.newFixedThreadPool(10);
        List<Future<LocalDate>> futures = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            futures.add(pool.submit(task));
        }
        for(Future<LocalDate> future :futures){
            System.out.println(future.get());
        }
    }
 private static final ThreadLocal<DateFormat> df = new ThreadLocal<DateFormat>(){
        protected  DateFormat initialValue(){
            return new SimpleDateFormat("yyyyMMdd");
        }
    };

    public static Date conver(String source) throws ParseException {
        return df.get().parse(source);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值