我是靠谱客的博主 眼睛大蜗牛,最近开发中收集的这篇文章主要介绍java8 新的日期类型用法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

import java.time.*;

import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.Date;
import java.util.Objects;
/**
* java8 新的日期类型用法 LocalDate、LocalTime、LocalDateTime用法
*
* @author slliver
* @date 2019-01-09 15:49
*/
public class LocalDateUtils {
/**
* 获取当前时间
*/
public static void getLocalDateTest() {
LocalDate localDate = LocalDate.now();
System.out.println(localDate);
LocalTime localTime = LocalTime.now();
System.out.println(localTime);
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
}
/**
* 根据指定日期/时间创建对象
*/
public static void createLocalDateTest() {
LocalDate localDate1 = LocalDate.now();
LocalDate localDate = LocalDate.of(2020, 1, 9);
System.out.println(localDate);
System.out.println(Objects.equals(localDate1, localDate));
LocalTime localTime = LocalTime.of(13, 35, 22);
System.out.println(localTime);
LocalDateTime localDateTime = LocalDateTime.of(2020, 1, 9, 13, 35, 22);
System.out.println(localDateTime);
}
/**
* 日期时间的加减
* 对于LocalDate,只有精度大于或等于日的加减,如年、月、日;
* 对于LocalTime,只有精度小于或等于时的加减,如时、分、秒、纳秒;
* 对于LocalDateTime,则可以进行任意精度的时间相加减;
*/
public static void locaLDateAddAndSubTest() {
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println("当前时间 == >> " + localDateTime);
//以下方法的参数都是long型,返回值都是LocalDateTime
LocalDateTime plusYearsResult = localDateTime.plusYears(2L);
System.out.println("当前时间加上两年后的日期 == >>> " + plusYearsResult);
LocalDateTime plusMonthsResult = localDateTime.plusMonths(3L);
System.out.println("当前时间加上3个月后的日期 == >>> " + plusMonthsResult);
LocalDateTime plusDaysResult = localDateTime.plusDays(7L);
System.out.println("当前时间加上7天之后的日期 == >>> " + plusDaysResult);
LocalDateTime plusHoursResult = localDateTime.plusHours(2L);
System.out.println("当前时间加上2小时之后的日期 == >>> " + plusHoursResult);
LocalDateTime plusMinutesResult = localDateTime.plusMinutes(20L);
System.out.println("当前时间加上20分钟之后的日期 == >>> " + plusMinutesResult);
LocalDateTime plusSecondsResult = localDateTime.plusSeconds(120L);
System.out.println("当前时间加上120秒之后的日期 == >>> " + plusSecondsResult);
System.out.println("当前时间是 : " + localDateTime + "n"
+ "当前时间加2年后为 : " + plusYearsResult + "n"
+ "当前时间加3个月后为 : " + plusMonthsResult + "n"
+ "当前时间加7日后为 : " + plusDaysResult + "n"
+ "当前时间加2小时后为 : " + plusHoursResult + "n"
+ "当前时间加20分钟后为 : " + plusMinutesResult + "n"
+ "当前时间加120秒后为 : " + plusSecondsResult + "n"
);
System.out.println("==================================================================");
// 也可以以另一种方式来相加减日期,即plus(long amountToAdd, TemporalUnit unit) 参数1 : 相加的数量, 参数2 : 相加的单位
LocalDateTime nextMonth = localDateTime.plus(1, ChronoUnit.MONTHS);
LocalDateTime nextYear = localDateTime.plus(1, ChronoUnit.YEARS);
LocalDateTime nextWeek = localDateTime.plus(1, ChronoUnit.WEEKS);
System.out.println("now : " + localDateTime + "n"
+ "nextYear : " + nextYear + "n"
+ "nextMonth : " + nextMonth + "n"
+ "nextWeek :" + nextWeek + "n"
);
System.out.println("==================================================================");
}
/**
* 将年、月、日等修改为指定的值,并返回新的日期(时间)对象
*/
public static void updateYearMonthDay() {
LocalDate localDate = LocalDate.now();
// 当前时间基础上,指定本年当中的第几天,取值范围为1-365,366
LocalDate withDayOfYearResult = localDate.withDayOfYear(200);
// 当前时间基础上,指定本月当中的第几天,取值范围为1-29,30,31
LocalDate withDayOfMonthResult = localDate.withDayOfMonth(5);
// 当前时间基础上,直接指定年份
LocalDate withYearResult = localDate.withYear(2017);
// 当前时间基础上,直接指定月份
LocalDate withMonthResult = localDate.withMonth(5);
System.out.println("当前时间是 : " + localDate + "n"
+ "指定本年当中的第200天 : " + withDayOfYearResult + "n"
+ "指定本月当中的第5天 : " + withDayOfMonthResult + "n"
+ "直接指定年份为2017 : " + withYearResult + "n"
+ "直接指定月份为5月 : " + withMonthResult + "n"
);
}
/**
* 获取日期的年月日周时分秒
*/
public static void getEveryLocalDateTime() {
LocalDateTime localDateTime = LocalDateTime.now();
int dayOfYear = localDateTime.getDayOfYear();
int dayOfMonth = localDateTime.getDayOfMonth();
DayOfWeek dayOfWeek = localDateTime.getDayOfWeek();
System.out.println("今天是 " + localDateTime + "n"
+ "本年当中第 " + dayOfYear + "天" + "n"
+ "本月当中第 " + dayOfMonth + "天" + "n"
+ "本周中星期" + dayOfWeek.getValue() + ", -即 ==>> " + dayOfWeek + "n");
}
/**
* 时间日期前后的比较与判断
*/
public static void compareBeforeOrAfter() {
// 判断两个时间点的前后
LocalDate localDate1 = LocalDate.of(2018, 8, 8);
LocalDate localDate2 = LocalDate.of(2019, 1, 9);
boolean date1IsBeforeDate2 = localDate1.isBefore(localDate2);
System.out.println("date1IsBeforeDate2 : " + date1IsBeforeDate2);
LocalDate localDate3 = LocalDate.now();
LocalDate localDate4 = LocalDate.now();
boolean date1IsBeforeDate3 = localDate3.isBefore(localDate4);
System.out.println("date1IsBeforeDate3 : " + date1IsBeforeDate3);
}
/**
* 判断是否为闰年
*/
public static boolean isLeapYear() {
LocalDate now = LocalDate.now();
boolean isLeapYear = now.isLeapYear();
System.out.println("当前日期 : " + now + ", 当前日期是否为闰年 == >>>
" + now.isLeapYear());
return isLeapYear;
}
/**
* java8时钟
*/
public static void testClock() {
//返回当前时间,根据系统时间和UTC
Clock clock = Clock.systemUTC();
// 运行结果: SystemClock[Z]
System.out.println(clock);
}
/**
* 时间戳
* 事实上Instant就是java8以前的Date,可以使用以下两个类中的方法在这两个类型之间进行转换,
* 比如Date.from(Instant)就是用来把Instant转换成java.util.date的,而new Date().toInstant()就是将Date转换成Instant的
*/
public static void testInstant() {
Instant instant1 = Instant.now();
// 2019-06-08T16:50:19.174Z
System.out.println("instant1 == >> " + instant1);
Date date = Date.from(instant1);
Instant instant2 = date.toInstant();
// Sun Jun 09 00:50:19 CST 2019
System.out.println("date == >> " + date);
System.out.println("instant2 == >> " + instant2);
}
/**
* 计算日期间隔
* Period:用于计算两个“日期”间隔
*/
public static void calDatePeriod() {
System.out.println("******************************************************************************************");
// 计算两个日期的日期间隔-年月日
LocalDate date1 = LocalDate.of(2019, 12, 19);
LocalDate date2 = LocalDate.of(2020, 1, 9);
// 内部是用date2-date1,所以得到的结果是负数
Period period = Period.between(date1, date2);
System.out.println("相差年数 : " + period.getYears());
System.out.println("相差月数 : " + period.getMonths());
System.out.println("相差日数 : " + period.getDays());
// 还可以这样获取相差的年月日
System.out.println("******************************************************************************************");
long years = period.get(ChronoUnit.YEARS);
long months = period.get(ChronoUnit.MONTHS);
long days = period.get(ChronoUnit.DAYS);
System.out.println("相差的年月日分别为 : " + years + "," + months + "," + days);
// 注意,当获取两个日期的间隔时,并不是单纯的年月日对应的数字相加减,而是会先算出具体差多少天,在折算成相差几年几月几日的
System.out.println("******************************************************************************************");
}
/**
* 计算时间间隔
* Duration:用于计算两个“时间”间隔
*/
public static void calTimePeriod() {
LocalDateTime date3 = LocalDateTime.of(2019, 12, 30, 15, 03, 00);
LocalDateTime date4 = LocalDateTime.now();
Duration duration = Duration.between(date3, date4);
System.out.println(date3 + " 与 " + date4 + " 间隔
" + "n"
+ " 天 :" + duration.toDays() + "n"
+ " 时 :" + duration.toHours() + "n"
+ " 分 :" + duration.toMinutes() + "n"
+ " 毫秒 :" + duration.toMillis() + "n"
+ " 纳秒 :" + duration.toNanos() + "n"
);
// 注意,并没有获得秒差的,但既然可以获得毫秒,秒就可以自行获取了
}
/**
* 获取时间戳
* 当计算程序的运行时间时,应当使用时间戳Instant
*/
public static void getInstant() throws InterruptedException {
Instant ins1 = Instant.now();
for (int i = 0; i < 10000000; i++) {
//循环一百万次
}
Instant ins2 = Instant.now();
Duration duration1 = Duration.between(ins1, ins2);
System.out.println("程序1运行耗时为 : " + duration1.toMillis() + "毫秒");
LocalDateTime date1 = LocalDateTime.now();
for (int i = 0; i < 100; i++) {
Thread.sleep(100L);
}
LocalDateTime date2 = LocalDateTime.now();
Duration duration2 = Duration.between(date1, date2);
long periodMillis = duration2.toMillis();
System.out.println("程序2运行耗时为 : " + periodMillis + "毫秒" + ", 相当于 == >> " + periodMillis / 1000 + " 秒");
}
/**
* 时间日期的格式化(格式化后返回的类型是String)DateTimeFormatter的格式很多,想看自己去源码查看
*/
public static String format(LocalDateTime localDateTime, String pattern) {
// 使用我们自动以格式
DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern(pattern);
// 使用jdk自身配置好的日期格式
//
DateTimeFormatter formatter1 = DateTimeFormatter.ISO_LOCAL_TIME;
String dateTimeStr = formatter1.format(localDateTime);
return dateTimeStr;
}
/**
* 将时间字符串形式转化为日期对象
*/
public static LocalDateTime parse(String datetime, String pattern) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(pattern);
LocalDateTime localDateTime = LocalDateTime.parse(datetime, dtf);
return localDateTime;
}
/**
* 当前时间戳转日期
*/
public static String parseCurrentInstantToDate(String pattern) {
DateTimeFormatter df = DateTimeFormatter.ofPattern(pattern);
String longToDateTime = df.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(System.currentTimeMillis()), ZoneId.of("Asia/Shanghai")));
return longToDateTime;
}
/**
* 指定时间戳转日期
*/
public static String parseInstantToDate(long instantMillis, String pattern) {
DateTimeFormatter df = DateTimeFormatter.ofPattern(pattern);
String longToDateTime = df.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(instantMillis), ZoneId.of("Asia/Shanghai")));
return longToDateTime;
}
public static void main(String[] args) throws InterruptedException {
System.out.println("******************************************************************************************");
String pattern = "yyyy-MM-dd HH:mm:ss";
LocalDateTime now = LocalDateTime.now();
format(now, pattern);
String patternDate = "yyyy-MM-dd";
format(now, patternDate);
String patternTime = "HH:mm:ss";
format(now, patternTime);
System.out.println("******************************************************************************************");
String datetime = "2018-01-13 21:27:30";
LocalDateTime localDateTime = parse(datetime, pattern);
System.out.println("字符串格式化日期后 == >>> " + localDateTime);
System.out.println("字符串格式化日期后在格式化成字符串 == >>> " + format(localDateTime, pattern));
System.out.println("******************************************************************************************");
String instantDateStr = parseCurrentInstantToDate(pattern);
System.out.println("当前时间戳转日期字符串形式 == >>> " + instantDateStr);
LocalDateTime instantDate = parse(instantDateStr, pattern);
System.out.println("当前时间戳转日期日期对象形式 == >>> " + instantDate);
System.out.println("******************************************************************************************");
Instant instant = Instant.now();
String instantDateStr2 = parseInstantToDate(instant.toEpochMilli(), pattern);
System.out.println("指定时间戳转日期日期对象形式 == >>> " + instantDateStr2);
long instantMillis = 1566454043790L;
String instantDateStr3 = parseInstantToDate(instantMillis, pattern);
System.out.println("指定时间戳转日期日期对象形式 == >>> " + instantDateStr3);
}
}

最后

以上就是眼睛大蜗牛为你收集整理的java8 新的日期类型用法的全部内容,希望文章能够帮你解决java8 新的日期类型用法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部