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")));
}
}