网站首页 > 技术文章 正文
1 获取当前时间
// 代码
@Test
public void now(){
LocalDate localDate = LocalDate.now();
log.info("日期:"+ localDate);
LocalTime localTime = LocalTime.now();
log.info("时间:"+ localTime);
LocalDateTime localDateTime = LocalDateTime.now();
log.info("日期时间:"+ localDateTime);
}
// 输出
INFO - 日期:2023-09-05
INFO - 时间:22:28:21.994
INFO - 日期时间:2023-09-05T22:28:21.994
2 设置指定时间
// 代码
@Test
public void setDateTime(){
// 设置指定的年、月、日、时、分、秒
LocalDateTime localDateTime = LocalDateTime.of(2023, 10, 1, 10, 30, 30);
log.info(localDateTime);
// 获取一天中小时间和最大时间
LocalDate localDate = LocalDate.now();
log.info(localDate);
LocalDateTime min = LocalDateTime.of(localDate, LocalTime.MIN);
log.info(min);
LocalDateTime max = LocalDateTime.of(localDate, LocalTime.MAX);
log.info(max);
}
// 输出
INFO - 2023-10-01T10:30:30
INFO - 2023-09-05
INFO - 2023-09-05T00:00
INFO - 2023-09-05T23:59:59.999999999
3 获取年、月、日、时、分、秒、星期几
// 代码
@Test
public void getDateTimeInfo(){
LocalDateTime localDateTime = LocalDateTime.now();
// 获取年
int year = localDateTime.getYear();
log.info("年:"+year);
// 获取月
Month month = localDateTime.getMonth();
int monthValue = localDateTime.getMonthValue();
log.info("月:"+month);
log.info("月:"+monthValue);
// 获取日
int dayOfMonth = localDateTime.getDayOfMonth();
log.info("日:"+dayOfMonth);
// 获取时
int hour = localDateTime.getHour();
log.info("时:"+hour);
// 获取分
int minute = localDateTime.getMinute();
log.info("分:"+minute);
// 获取秒
int second = localDateTime.getSecond();
log.info("秒:"+second);
// 获取星期几
DayOfWeek dayOfWeek = localDateTime.getDayOfWeek();
log.info("星期:"+dayOfWeek);
}
// 输出
INFO - 年:2023
INFO - 月:SEPTEMBER
INFO - 月:9
INFO - 日:5
INFO - 时:22
INFO - 分:37
INFO - 秒:50
INFO - 星期:TUESDAY
4 设置指定的年、月、日
// 代码
@Test
public void setDate(){
LocalDate localDate = LocalDate.now();
log.info("当前日期:"+localDate);
// 设置本月第10天
LocalDate withDayOfMonth = localDate.withDayOfMonth(10);
log.info("设置本月第10天:"+withDayOfMonth);
// 设置本年第100天
LocalDate withDayOfYear = localDate.withDayOfYear(100);
log.info("设置本年第100天:"+withDayOfYear);
// 设置本年10月
LocalDate withMonth = localDate.withMonth(10);
log.info("设置本年10月:"+withMonth);
// 设置3000年
LocalDate withYear = localDate.withYear(3000);
log.info("设置3000年:"+withYear);
}
// 输出
INFO - 当前日期:2023-09-05
INFO - 设置本月第10天:2023-09-10
INFO - 设置本年第100天:2023-04-10
INFO - 设置本年10月:2023-10-05
INFO - 设置3000年:3000-09-05
5 设置偏移量
// 代码
@Test
public void setOff(){
LocalDateTime localDateTime = LocalDateTime.now();
// 一周前
LocalDateTime minusDays = localDateTime.minusDays(7);
log.info("一周前:"+minusDays);
// 一周后
LocalDateTime plusDays = localDateTime.plusDays(7);
log.info("一周后:"+plusDays);
}
// 输出
INFO - 一周前:2023-08-29T22:48:03.462
INFO - 一周后:2023-09-12T22:48:03.462
6 获取子午线时间和东八区时间
// 代码
@Test
public void getInstance(){
// 日期变更子午线时间
Instant instant = Instant.now();
log.info("子午线时间:"+instant);
// 东八区时间
OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
log.info("东八区时间:"+offsetDateTime);
}
// 输出
INFO - 子午线时间:2023-09-05T14:50:51.398Z
INFO - 东八区时间:2023-09-05T22:50:51.398+08:00
7 时间戳
// 代码
@Test
public void toEpochMilli(){
Instant instant = Instant.now();
// 获取从1970年1月1日0时0分0秒开始的毫秒数
long milli = instant.toEpochMilli();
log.info("从1970年1月1日0时0分0秒开始的毫秒数:"+milli);
// 根据毫秒时间戳返回Instant对象
Instant instant1 = Instant.ofEpochMilli(milli);
log.info(instant1);
}
// 输出
INFO - 从1970年1月1日0时0分0秒开始的毫秒数:1693925655077
INFO - 2023-09-05T14:54:15.077Z
8 格式化为字符串
// 代码
@Test
public void format(){
// 格式化为yyyy-MM-dd
DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String format1 = dtf1.format(LocalDate.now());
log.info(format1);
// 格式化为yyyy-MM-dd HH:mm:ss
DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String format2 = dtf2.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(1693925655077L),ZoneId.systemDefault()));
log.info(format2);
}
// 输出
INFO - 2023-09-05
INFO - 2023-09-05 22:54:15
9 解析为日期时间
// 代码
@Test
public void parse(){
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
log.info(LocalDateTime.parse("2023-10-01 10:30:30",dtf));
}
// 输出
INFO - 2023-10-01T10:30:30
10 周期Period
// 代码
@Test
public void period(){
// 用于计算日期相对间隔(无法隔月计算)
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate startDate = LocalDate.parse("2021-03-26", fmt);
LocalDate endDate = LocalDate.parse("2023-10-01", fmt);
Period period = Period.between(startDate, endDate);
log.info("相差:" + period.getYears() + " 年 " + period.getMonths() + " 个月 " + period.getDays() + " 天");
// 隔月计算要用toEpochDay方法
LocalDate localDate = LocalDate.now();
LocalDate localDate1 = localDate.plusDays(100);
// 无法隔月计算
log.info(Period.between(localDate, localDate1).getDays());
// 可以计算隔月
log.info(localDate1.toEpochDay()-localDate.toEpochDay());
}
// 输出
INFO - 相差:2 年 6 个月 5 天
INFO - 9
INFO - 100
11 时间间隔Duration
// 代码
@Test
public void duration(){
// 用于计算时间差
LocalDateTime localDateTime = LocalDateTime.now();
LocalDateTime localDateTime2 = localDateTime.plusDays(1);
Duration between = Duration.between(localDateTime, localDateTime2);
log.info(between.getSeconds());
// 计算日期绝对间隔
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate startDate = LocalDate.parse("2020-03-26",fmt);
LocalDate endDate = LocalDate.parse("2023-10-01",fmt);
log.info("总相差的天数:" + startDate.until(endDate, ChronoUnit.DAYS));
log.info("总相差的月数:" + startDate.until(endDate, ChronoUnit.MONTHS));
log.info("总相差的年数:" + startDate.until(endDate, ChronoUnit.YEARS));
}
// 输出
INFO - 86400
INFO - 总相差的天数:1284
INFO - 总相差的月数:42
INFO - 总相差的年数:3
12 常用日期获取
// 代码
@Test
public void with(){
// 本周一
LocalDate with = LocalDate.now().with(DayOfWeek.of(1));
log.info("本周一:"+with);
// 下周一
LocalDate with1 = LocalDate.now().with(TemporalAdjusters.next(DayOfWeek.of(1)));
log.info("下周一:"+with1);
// 本月第一天
LocalDate with2 = LocalDate.now().with(TemporalAdjusters.firstDayOfMonth());
log.info("本月第一天:"+with2);
// 下月第一天
LocalDate with3 = LocalDate.now().plusMonths(1).with(TemporalAdjusters.firstDayOfMonth());
log.info("下月第一天:"+with3);
}
// 输出
INFO - 本周一:2023-09-04
INFO - 下周一:2023-09-11
INFO - 本月第一天:2023-09-01
INFO - 下月第一天:2023-10-01
13 String与Date相互转换
// 代码
@Test
public void string2Date() throws Exception{
// Date转String
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
log.info(sdf.format(date));
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
log.info(sdf.format(date));
sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
log.info(sdf.format(date));
// String 转 Date
String string = "2016-10-24 21:59:06";
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
log.info(sdf2.parse(string));
}
// 输出
INFO - 2023-09-05
INFO - 2023-09-05 23:14:34
INFO - 2023年09月05日 23:14:34
INFO - Mon Oct 24 21:59:06 CST 2016
14 String与LocaDate相互转换
// 代码
@Test
public void string2LocalDate(){
// LocalDate 转 String
// 这里不能用 yyyy-MM-dd HH:mm:ss 原因是LocalDate本身不含时分秒
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate now = LocalDate.now();
String localTime = df.format(now);
log.info(localTime);
// String 转 LocalDate
LocalDate ldt = LocalDate.parse("2023-10-01", df);
log.info(ldt);
LocalDate ldt2 = LocalDate.parse("2023-10-01");
log.info(ldt2);
// 如果用yyyy-MM-dd HH:mm:ss 但是输出仍然只是年月日
DateTimeFormatter df2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDate ldt3 = LocalDate.parse("2023-10-01 11:11:11", df2);
log.info(ldt3);
}
// 输出
INFO - 2023-09-05
INFO - 2023-10-01
INFO - 2023-10-01
INFO - 2023-10-01
15 String与LocaTime相互转换
// 代码
@Test
public void string2LocalTime(){
// LocalTime 转 String
DateTimeFormatter df = DateTimeFormatter.ofPattern("HH:mm:ss");
LocalTime now = LocalTime.now();
String localTime = df.format(now);
log.info(localTime);
// String 转 LocalTime
LocalTime ldt = LocalTime.parse("23:30:01", df);
log.info(ldt);
}
// 输出
INFO - 23:22:17
INFO - 23:30:01
16 String与LocalDateTime相互转换
// 代码
@Test
public void string2LocalDateTime(){
// LocalTimeDate 转 String ,这里不能用yyyy-MM-dd
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime now = LocalDateTime.now();
String localTime = df.format(now);
log.info(localTime);
//String 转 LocalTimeDate
LocalDateTime ldt = LocalDateTime.parse("2023-10-01 23:30:30", df);
log.info(ldt);
}
// 输出
INFO - 2023-09-05 23:25:01
INFO - 2023-10-01T23:30:30
17 Date与LocalDate相互转换
// 代码
@Test
public void date2LocalDate(){
// LocalDate转Date
LocalDate localDate = LocalDate.now();
ZoneId zoneId = ZoneId.systemDefault();
Date date = Date.from(localDate.atStartOfDay().atZone(zoneId).toInstant());
log.info(date);
// Date转LocalDate
Date date2 = new Date();
LocalDate localDate2 = date2.toInstant().atZone(zoneId).toLocalDate();
log.info(localDate2);
}
// 输出
INFO - Tue Sep 05 00:00:00 CST 2023
INFO - 2023-09-05
18 Date与LocalTime转换
// 代码
@Test
public void date2LocalTime(){
//Date转LocalTime
Date date = new Date();
ZoneId zoneId = ZoneId.systemDefault();
LocalTime localTime = date.toInstant().atZone(zoneId).toLocalTime();
log.info(localTime);
}
// 输出
INFO - 23:29:27.233
19 Date与LocalDateTime相互转换
// 代码
@Test
public void date2LocalDateTime(){
// LocalDateTime转Date
/*在LocalDateTime 转 Date 时,需要使用到 Java 8的几个类
ZoneId/ZoneOffset:表示时区
ZonedDateTime: 表示特定时区的日期和时间
Instant:表示时刻,不直接对应年月日信息,需要通过时区转换*/
LocalDateTime localDateTime = LocalDateTime.now();
// 获取系统默认时区
ZoneId zoneId = ZoneId.systemDefault();
// 时区的日期和时间
ZonedDateTime zonedDateTime = localDateTime.atZone(zoneId);
// 获取时刻
Date date = Date.from(zonedDateTime.toInstant());
log.info(date);
// Date转LocalDateTime
Date date2 = new Date();
LocalDateTime localDateTime2 = date2.toInstant().atZone(zoneId).toLocalDateTime();
log.info(localDateTime2);
}
// 输出
INFO - Tue Sep 05 23:31:52 CST 2023
INFO - 2023-09-05T23:31:52.903
20 LocalDate与LocalDateTime相互转换
// 代码
@Test
public void localDate2LocalDateTime(){
// LocalDateTime转LocalDate
LocalDateTime localDateTime = LocalDateTime.now();
LocalDate localDate = localDateTime.toLocalDate();
log.info(localDate);
// LocalDate转LocalDateTime
LocalDate localDate2 = LocalDate.now();
LocalDateTime localDateTime1 = localDate2.atStartOfDay();
LocalDateTime localDateTime2 = localDate2.atTime(10,10,10);
LocalDateTime localDateTime3 = localDate2.atTime(LocalTime.now());
log.info(localDateTime1);
log.info(localDateTime2);
log.info(localDateTime3);
}
// 输出
INFO - 2023-09-05
INFO - 2023-09-05T00:00
INFO - 2023-09-05T10:10:10
INFO - 2023-09-05T23:34:23.806
21 LocalTime与LocalDateTime转换
// 代码
@Test
public void localTime2LocalDateTime(){
// LocalDateTime转LocalTime
LocalDateTime localDateTime = LocalDateTime.now();
LocalTime localTime = localDateTime.toLocalTime();
log.info(localTime);
}
// 输出
INFO - 23:36:05.098
22 LocalDateTime与Long转换
// 代码
@Test
public void localDateTime2Long(){
// LocalDateTime 转 Long(毫秒时间戳)
ZoneId zone = ZoneId.systemDefault();
Instant instant = LocalDateTime.now().atZone(zone).toInstant();
log.info(instant.toEpochMilli());
// Long(毫秒时间戳) 转 LocalDateTime
Instant instant1 = Instant.ofEpochMilli(1693928280738L);
log.info(LocalDateTime.ofInstant(instant1, zone));
}
// 输出
INFO - 1693928304283
INFO - 2023-09-05T23:38:00.738
23 总结
Java8吸收了Joda-Time的精华,以一个新的开始为Java创建优秀的API。新的java.time中包含了所有关于本地时间(LocalDate)、本地时间(LocalTIme)、本地日期时间(LocalDateTime)、时区(ZonedDateTime)和持续时间(Duration)的类。本文主要介绍了常用的一些基本方法,大家可以在本地验证下,也可以封装成工具类在生产上使用,很是方便。
【温馨提示】
点赞+收藏文章,关注我并私信回复【面试题解析】,即可100%免费领取楼主的所有面试题资料!
猜你喜欢
- 2024-10-22 DATE #4、Java操作日期时间-②老版本使用的日期和时间类
- 2024-10-22 JDK1.7和JDK1.8中日期时间使用和处理的不同「Java工程师必读」
- 2024-10-22 浅谈Java8日期时间处理(抗美援朝战争时间的起止日期)
- 2024-10-22 玩转MySQL的时间类型:Date、DateTime、TimeStamp、Time
- 2024-10-22 java 8 新特性 日期和时间 API(我的世界java版特性)
- 2024-10-22 JAVA时间工具包 - java.time(java中时间)
- 2024-10-22 Java 打印日期/时间格式(java 打印当前时间)
- 2024-10-22 Java时间类Date与Calendar的区别与使用
- 2024-10-22 用python 计算两个日期相差多少个月
- 2024-10-22 两天两夜,1M图片优化到100kb(怎么把2兆的照片调成100k)
- 11-27echarts图形报表的入门案例
- 11-27Echarts仿电梯运行图
- 11-27微信小程序开发之wepy 引入echarts统计图方法 亲测可用
- 11-27yarn安装echarts教程
- 11-27微信小程序使用 ECharts
- 11-274、echarts 如何画图?(必会)
- 11-27JavaScript 前端数据可视化——ECharts.js
- 11-27vue+echarts使用
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)