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();
}
/**
* java.util.Date to java.time.LocalDate
*/
@Test
public void testConvertToLocalDateViaInstant() {
Date dateToConvert = new Date();
LocalDate localDate = dateToConvert.toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDate();
DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String dateStr = dateTimeFormatter1.format(localDate);
System.out.println(dateStr);
}
/**
* java.util.Date to java.time.LocalDate
*/
@Test
public void testConvertToLocalDateViaMilisecond() {
Date dateToConvert = new Date();
LocalDate localDate = Instant.ofEpochMilli(dateToConvert.getTime())
.atZone(ZoneId.systemDefault())
.toLocalDate();
DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String dateStr = dateTimeFormatter1.format(localDate);
System.out.println(dateStr);
}
/**
* java.util.Date to java.time.LocalDate
*/
@Test
public void testConvertToLocalDateViaSqlDate() {
Date dateToConvert = new Date();
LocalDate localDate = new java.sql.Date(dateToConvert.getTime()).toLocalDate();
DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String dateStr = dateTimeFormatter1.format(localDate);
System.out.println(dateStr);
}
/**
* java.util.Date to java.time.LocalDateTime
*/
public LocalDateTime convertToLocalDateTimeViaInstant(Date dateToConvert) {
return dateToConvert.toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDateTime();
}
/**
* java.util.Date to java.time.LocalDateTime
*/
public LocalDateTime convertToLocalDateTimeViaMilisecond(Date dateToConvert) {
return Instant.ofEpochMilli(dateToConvert.getTime())
.atZone(ZoneId.systemDefault())
.toLocalDateTime();
}
/**
* java.util.Date to java.time.LocalDateTime
*/
public LocalDateTime convertToLocalDateTimeViaSqlTimestamp(Date dateToConvert) {
return new java.sql.Timestamp(
dateToConvert.getTime()).toLocalDateTime();
}
/**
* java.time.LocalDate to java.util.Date
*/
public Date convertToDateViaSqlDate(LocalDate dateToConvert) {
return java.sql.Date.valueOf(dateToConvert);
}
/**
* java.time.LocalDate to java.util.Date
*/
public Date convertToDateViaInstant(LocalDate dateToConvert) {
return java.util.Date.from(dateToConvert.atStartOfDay()
.atZone(ZoneId.systemDefault())
.toInstant());
}
/**
* java.time.LocalDateTime to java.util.Date
*/
public Date convertToDateViaSqlTimestamp(LocalDateTime dateToConvert) {
return java.sql.Timestamp.valueOf(dateToConvert);
}
/**
* java.time.LocalDateTime to java.util.Date
*/
public Date convertToDateViaInstant(LocalDateTime dateToConvert) {
return java.util.Date
.from(dateToConvert.atZone(ZoneId.systemDefault())
.toInstant());
}
/**
* 返回指定时刻所在周的第一天,基于JDK1.8
* @param now
* @return
*/
public static String firstDayOfWeek(LocalDate now) {
LocalDate startOfCurrentWeek = now.with(DayOfWeek.MONDAY);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
return formatter.format(startOfCurrentWeek);
}
/**
* 返回指定时刻所在周的最后一天,基于JDK1.8
* @param now
* @return
*/
public static String lastDayOfWeek(LocalDate now) {
LocalDate endOfCurrentWeek = now.with(DayOfWeek.SUNDAY);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
return formatter.format(endOfCurrentWeek);
}
/**
* 返回指定时刻所在月的最后一天,基于JDK1.8
* @param now
* @return
*/
public static String lastDayOfMonth(LocalDate now) {
LocalDate lastDayOfMonth = now.with(TemporalAdjusters.lastDayOfMonth());
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
return formatter.format(lastDayOfMonth);
}
}
Java 1.8 日期时间小记
最新推荐文章于 2023-11-20 10:42:12 发布