java8之时间处理类

java8之前我们使用Date,Calendar等类处理时间和日期,这两个类很不好用,而且属于线程非安全类。从java开始,jdk提供了三个新的用来处理时间和日期的类:LocalDate,LocalTime,LocalDateTime,下面让我们一起来学习一下如何使用这三个类。

LocalDate

LocalDate仅仅是时间再数字上的显示,和实际的时间本质不同,即使指定了时区,得到的时间也仅仅是数字上的显示而已。

import java.time.LocalDate;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;

import org.junit.Test;

public class MyLocalDate1 {
	
	@Test
	public void test1() {
	    //获取本地日期
		LocalDate localDate = LocalDate.now();
		System.out.println(localDate);
		
		//获取指定时区的日期
		LocalDate localDateWithZone = LocalDate.now(ZoneId.of("UTC"));
		System.out.println(localDateWithZone);
	}
	
	@Test
	public void test2() {
	    //使用parse方法解析时间
		LocalDate date1 = LocalDate.parse("2019-12-12");
		System.out.println(date1);
		
		//使用parse并指定解析器获取时间
		LocalDate date2 = LocalDate.parse("2019/12/13", DateTimeFormatter.ofPattern("yyyy/MM/dd"));
		System.out.println(date2);
	}
	
	@Test
	public void test3() {
	    //使用of方法获取时间
		LocalDate date1 = LocalDate.of(2019, 11, 12);
		System.out.println(date1);
	}
	
	@Test
	public void test4() {
	    //计算时间,增加一天
		LocalDate date1 = LocalDate.of(2019, 11, 30);
		LocalDate nextDate = date1.plusDays(1);
		System.out.println(nextDate);
		
		//计算时间,较少一天
		LocalDate date2 = LocalDate.of(2019, 12, 1);
		LocalDate beforeDate2 = date2.minusDays(1);
		System.out.println(beforeDate2);
	}
	
	@Test
	public void test5() {
	    //格式化时间
		LocalDate date1 = LocalDate.of(2019, 11, 30);
		
		String str1 = date1.format(DateTimeFormatter.ofPattern("yyyy@MM@dd"));
		System.out.println(str1);
		
		String str2 = date1.format(DateTimeFormatter.ofPattern("yyyy/MM/dd"));
		System.out.println(str2);
	}
	
	@Test
	public void test6() {
	    //计算时间之间的差值
		LocalDate date1 = LocalDate.of(2018, 3, 19);
		LocalDate now = LocalDate.of(2019, 3, 19);
		long daysBetween = ChronoUnit.DAYS.between(date1, now);
		System.out.println(daysBetween);
	}
}

LocalTime

LocalTime和LocalDate类似,仅仅是时间再数字上的显示

import java.time.LocalTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;

import org.junit.Test;

public class MyLocalTime1 {
	
	@Test
	public void test1() {
		//本地的当前时间
		LocalTime localTime = LocalTime.now();
		System.out.println(localTime);
		
		//当前时刻指定时区的时间显示
		LocalTime localTimeWithZone = LocalTime.now(ZoneId.of("UTC"));
		System.out.println(localTimeWithZone);
	}
	
	@Test
	public void test2() {
		LocalTime localTime = LocalTime.of(12, 15);
		System.out.println(localTime);
		
		LocalTime localTime1 = LocalTime.parse("14:55");
		System.out.println(localTime1);
		
		LocalTime localTime2 = LocalTime.parse("14/55/12", DateTimeFormatter.ofPattern("HH/mm/ss"));
		System.out.println(localTime2);
	}
	
	@Test
	public void test3() {
		LocalTime time = LocalTime.now();
		System.out.println(time);
		
		LocalTime localTime2 = time.minusHours(1);
		System.out.println(localTime2);
	}
	
	@Test
	public void test4() {
		LocalTime time = LocalTime.now();
		System.out.println(time);
		
		String time2 = time.format(DateTimeFormatter.ofPattern("HH/mm/ss"));
		System.out.println(time2);
	}
	
	@Test
	public void test5() {
		LocalTime time = LocalTime.now();
		LocalTime time1 = time.minusMinutes(10);
		
		System.out.println(ChronoUnit.MINUTES.between(time, time1));
	}

}

LocalDateTime

该类用于处理时间+日期

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;

import org.junit.Test;

public class MyLocalDateTime {
	@Test
	public void test1() {
		//本地的日期时间
		LocalDateTime localDateTime = LocalDateTime.now();
		System.out.println(localDateTime);
		
		//指定时区的日期时间
		LocalDateTime localDateTime1 = LocalDateTime.now(ZoneId.of("UTC"));
		System.out.println(localDateTime1);
	}
	
	@Test
	public void test2() {
		//获取带时区的时间日期
		LocalDateTime localDateTime = LocalDateTime.now();
		ZonedDateTime localDateTime1 = localDateTime.atZone(ZoneId.of("UTC"));
		System.out.println(localDateTime1);
        //System.out.println(localDateTime1);
	}
	
	@Test
	public void test3() {
		//获得带时区偏移的时间日期的时间搓
		LocalDateTime localDateTime = LocalDateTime.now();
		System.out.println(localDateTime.toInstant(ZoneOffset.ofHours(1)).getEpochSecond());
		
		//获得带时区的时间日期的时间搓
		ZonedDateTime localDateTime1 = localDateTime.atZone(ZoneId.of("UTC"));
        System.out.println(localDateTime1.toInstant().getEpochSecond());
	}
	
	@Test
	public void test4() {
		//获取时区
		ZoneId zoneId1 = ZoneId.of("UTC+01:00");
		System.out.println(zoneId1);
		
		ZoneId zoneId2 = ZoneId.of("Asia/Shanghai");
		System.out.println(zoneId2);
	}
	
	@Test
	public void test5() {
		//获取时区偏移
		ZoneOffset zoneOffset = ZoneOffset.of("Z");
		System.out.println(zoneOffset);
		
		ZoneOffset zoneOffset1 = ZoneOffset.of("+01:00");
		System.out.println(zoneOffset1);
	}

}

Instant

import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;

import org.junit.Test;

public class MyInstance {

	@Test
	public void test1() {
		//获取时间错
		Instant instant1 = Instant.now();
		System.out.println(instant1);
		System.out.println(instant1.getEpochSecond());
		System.out.println(instant1.toEpochMilli());
		
		Instant instant2 = ZonedDateTime.now().toInstant();
		System.out.println(instant2);
	}
	
	@Test
	public void test2() {
		//使用parse的方式获取时间搓
		Instant instant3 = Instant.parse("2018-12-20T12:39:20.194Z");
		System.out.println(instant3);
		//重新指定时区
		System.out.println(instant3.atZone(ZoneId.of("UTC+08:00")));
		//System.out.println(LocalDateTime.now(ZoneId.of("UTC")));
	}

}

原文:https://blog.csdn.net/chenyang1010/article/details/88673472

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值