版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
import org.junit.Test;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoField;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAccessor;
import java.util.Date;
import java.util.Set;
public class TimeTest {
/**
* Instant:An instantaneous(瞬间的) point on the time-line.
*/
@Test
public void testInstant() {
Instant now = Instant.now();
System.out.println(now.toString());
// 取毫秒
System.out.println(now.get(ChronoField.MILLI_OF_SECOND));
// 取微秒
System.out.println(now.get(ChronoField.MICRO_OF_SECOND));
// 取纳秒
System.out.println(now.get(ChronoField.NANO_OF_SECOND));
// Instant转LocalDateTime
LocalDateTime localDateTime = LocalDateTime.ofInstant(now, ZoneId.systemDefault());
// 2019-08-16T09:00:49.324
System.out.println(localDateTime);
}
/**
* 默认时区对应的年月日,没有时分秒毫秒
*/
@Test
public void testLocalDate() {
LocalDate now = LocalDate.now();
System.out.println(now.toString());
now = LocalDate.of(2019, 7, 3);
// 2019-07-03
System.out.println(now.toString());
//日期加上1天
LocalDate plusDay = now.plusDays(1);
System.out.println(plusDay.toString());
//日期加上一周
LocalDate plusWeek = now.plusWeeks(1);
System.out.println(plusWeek.toString());
//计算当年前的第52天是几月几号
System.out.println("今年的第52天是:" + now.withDayOfYear(52));
//字符串转日期
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
TemporalAccessor dateTempora = dateTimeFormatter.parse("2018-01-14");
LocalDate date = LocalDate.from(dateTempora);
System.out.println(date);
//格式化日期
DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyyMMdd");
String dateStr = dateTimeFormatter1.format(now);
System.out.println(dateStr);
}
/**
* 默认时区对应的时分秒毫秒,没有年月日
*/
@Test
public void testLocalTime() {
LocalTime now = LocalTime.now();
System.out.println(now.toString());
now = LocalTime.of(23, 10, 10);
System.out.println(now.toString());
//时间加上12个小时
System.out.println("plus 12 hours: " + now.plusHours(12));
}
/**
* 默认时区对应的年月日时分秒毫秒
*/
@Test
public void testLocalDateTime() {
// 获得当前日期时间
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
now = LocalDateTime.of(2019, 7, 3, 9, 10, 10);
System.out.println(now);
// 字符串转日期时间
DateTimeFormatter strToDateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
TemporalAccessor dateTemporal = strToDateFormatter.parse("2017-01-01 12:12:13");
LocalDate date = LocalDate.from(dateTemporal);
System.out.println(date);
// 格式化日期时间
DateTimeFormatter dateToStrFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
String dateStr = dateToStrFormatter.format(now);
System.out.println(dateStr);
}
/**
* 一段时间,例如:2年、3个月、4天等.
*/
@Test
public void testPeriod() {
LocalDate startDate = LocalDate.now();
LocalDate endDate = startDate.plusDays(1);
Period period = Period.between(startDate, endDate);
System.out.println("间隔的天数" + period.getDays());
System.out.println("间隔的月数:" + period.getMonths());
System.out.println("间隔的年数:" + period.getYears());
// 直接使用LocalDate类中的方法计算日期间隔
long days = startDate.until(endDate, ChronoUnit.DAYS);
System.out.println("间隔的天数:" + days);
long months = startDate.until(endDate, ChronoUnit.MONTHS);
System.out.println("间隔的月数:" + months);
long weeks = startDate.until(endDate, ChronoUnit.WEEKS);
System.out.println("间隔的周数:" + weeks);
}
@Test
public void testDuration() {
LocalDateTime start = LocalDateTime.now();
LocalDateTime end = start.plusDays(1);
Duration duration = Duration.between(start, end);
System.out.println("间隔的秒数:" + duration.get(ChronoUnit.SECONDS));
System.out.println("间隔的纳秒数:" + duration.get(ChronoUnit.NANOS));
}
@Test
public void testZonedDateTime() {
ZonedDateTime zonedDatetime = ZonedDateTime.now();
ZonedDateTime zonedDatetimeFromZone = ZonedDateTime.now(ZoneId.of("America/Los_Angeles"));
LocalDateTime localDateTime = LocalDateTime.now();
ZonedDateTime zonedDatetimeFromZone2 = ZonedDateTime.of(localDateTime, ZoneId.of("America/Los_Angeles"));
System.out.println("默认时区(即北京)时间:" + zonedDatetime);
System.out.println("美国洛杉矶时间:" + zonedDatetimeFromZone);
System.out.println("美国洛杉矶时间:" + zonedDatetimeFromZone2);
Set<String> allZoneIds = ZoneId.getAvailableZoneIds();
System.out.println("全球时区集合:" + allZoneIds);
}
@Test
public void testDateToLocalDateTime() {
Date todayDate = new Date();
LocalDateTime ldt = Instant.ofEpochMilli(todayDate.getTime())
.atZone(ZoneId.systemDefault())
.toLocalDateTime();
System.out.println(ldt);
LocalDateTime localDateTime = LocalDateTime.now();
// from为Date类1.8起新增的
Date date = Date.from(localDateTime.atZone( ZoneId.systemDefault()).toInstant());
System.out.println(date);
// toInstant为Date类1.8起新增的
Instant instant = todayDate.toInstant();
}
}