JAVA对于时间的花式操作(不定期更新)

时间操作类

LocalDateTime/LocalDate

//当前时间(yyyy-MM-dd HH:mm:ss.SSS)
LocalDateTime aa=LocalDateTime.now();
//获取日期
String dateStr=aa.toLocalDate().toString();
// 获取日期:2022-07-29
System.out.println("获取日期:" + dateStr);
//获取时间
String timeStr=aa.toLocalTime().toString();
int year=aa.getYear();
int month=aa.getMonthValue();
int day=aa.getDayOfMonth();
int hour=aa.getHour();
int minute=aa.getMinute();
int second=aa.getSecond();
// 获取时间:14:30:47.795,年:2022,月:7,日:29,时:14,分:30,秒:47
System.out.format("获取时间:%s,年:%d,月:%d,日:%d,时:%d,分:%d,秒:%d%n",timeStr,year,month,day,hour,minute,second);

//获取日期时间字符串
String dataTimeStr=aa.toString();
// 获取日期时间字符串:2022-07-29T14:30:47.795
System.out.println("获取日期时间字符串:" + dataTimeStr);
//当前时间(yyyy-MM-dd)
LocalDate ld=LocalDate.now();
boolean isLeapYear = ld.isLeapYear();
System.out.println("今年是闰年:" + isLeapYear);// false
// 当前时间:2022-07-29
System.out.println("当前时间:" + ld);
//格式化当前时间
String formatter=aa.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
System.out.println("格式化当前时间:" + formatter);// 2022-07-29 14:30:47
System.out.println("后5天时间:"+aa.plusDays(5)); // 2022-08-03T14:30:47.795
System.out.println("前5天时间并格式化:"+aa.minusDays(5).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); // 2022-07-24
System.out.println("前一个月的时间:"+aa.minusMonths(1).format(DateTimeFormatter.ofPattern("yyyyMM"))); // 202206
System.out.println("后一个月的时间:"+aa.plusMonths(1)); // 2022-08-29T14:30:47.795
System.out.println("指定2099年的当前时间:"+aa.withYear(2099)); // 2099-07-29T14:30:47.795

//设置指定时间
LocalDate ld3=LocalDate.of(2017, Month.NOVEMBER, 17);//2017-11-17
LocalDate ld4=LocalDate.of(2018, 02, 11);//2018-02-11
LocalDateTime localDateTime = LocalDateTime.of(2019, Month.SEPTEMBER, 10, 14, 46, 56);
System.out.println("设置指定时间:" + localDateTime); // 2019-09-10T14:46:56
//日期相差比较
LocalDate ld1=LocalDate.parse("2017-11-17");
LocalDate ld2=LocalDate.parse("2018-01-05");
Period p=Period.between(ld1, ld2);
// 相差年: 0 相差月 :1 相差天:19
System.out.println("相差年: "+p.getYears()+" 相差月 :"+p.getMonths() +" 相差天:"+p.getDays());
//判断时间前后
// 当前时间
LocalDateTime ldt4 = LocalDateTime.now();
// 当前时间加10秒
LocalDateTime ldt5 = ldt4.plusMinutes(10);
// 当前时间是否大于:false
System.out.println("当前时间是否大于:"+ldt4.isAfter(ldt5));
// 当前时间是否小于:true
System.out.println("当前时间是否小于"+ldt4.isBefore(ldt5));

Date

// 获取系统当前的时间的毫秒值
long l = System.currentTimeMillis();
System.out.println(l);// 1659076976600
//将当前的时间和日期封装成对象
Date d = new Date();
System.out.println(d);// Fri Jul 29 14:42:56 CST 2022
//将指定的毫秒封装成对象
Date d1 = new Date(l);
System.out.println(d1);// Fri Jul 29 14:42:56 CST 2022
//获取当前的时间值
Date  d2 = new Date();
//获取日期对象格式
DateFormat  df = DateFormat.getDateInstance( );
String dat1= df.format(d2);
System.out.println(dat1); // 2022-7-29
//获取自定义格式的日期显示
df = new SimpleDateFormat("yyyy--MM--dd HH::mm::s" );
String dat2= df.format(d2);
System.out.println(dat2); // 2022--07--29 14::42::56

String str1= "2015年6月20日";
DateFormat df1 = DateFormat.getDateInstance(DateFormat.LONG);
Date date = null;
try {
    date = df1.parse(str1);
} catch (ParseException e) {
    e.printStackTrace();
}
System.out.println(date);//Sat Jun 20 00:00:00 CST 2015

// 比较时间
System.out.println("比较时间前者是否在后者之前: " + date.before(d2));// true
System.out.println("比较时间前者是否在后者之后: " + date.after(d2));// false

Calendar

// 获取当前时间
Calendar calendar = Calendar.getInstance();
System.out.println("当前Instant时间:" + calendar.toInstant().atZone(ZoneId.systemDefault()).toString());// 2022-07-29T15:02:13.116+08:00[Asia/Shanghai]
System.out.println("当前年:" + calendar.get(Calendar.YEAR));// 2022
System.out.println("当前月(从0开始计数):" + calendar.get(Calendar.MONTH));// 6
System.out.println("当前日:" + calendar.get(Calendar.DATE));// 29
System.out.println("当前小时(12小时制):" + calendar.get(Calendar.HOUR));// 3
System.out.println("当前分钟:" + calendar.get(Calendar.MINUTE));// 2
System.out.println("当前秒:" + calendar.get(Calendar.SECOND));// 13
System.out.println("当前毫秒:" + calendar.get(Calendar.MILLISECOND));// 116
System.out.println("当前小时(24小时制):" + calendar.get(Calendar.HOUR_OF_DAY));// 15
System.out.println("当前周的第几天(星期日为1,以此推算):" + calendar.get(Calendar.DAY_OF_WEEK));// 6
System.out.println("当前月中的第几天:" + calendar.get(Calendar.DAY_OF_MONTH));// 29
System.out.println("当前年的第几天:" + calendar.get(Calendar.DAY_OF_YEAR));// 210
System.out.println("当前月中的第几周:" + calendar.get(Calendar.WEEK_OF_MONTH));// 5
System.out.println("当前年的第几周:" + calendar.get(Calendar.WEEK_OF_YEAR));// 31

Calendar calendar1 = Calendar.getInstance();
calendar1.add(Calendar.DATE,34);//以日为单位,增加34天
System.out.println("操作后的日:" + calendar1.get(Calendar.DATE));// 1
System.out.println("操作后的月(从1开始计数):" + calendar1.get(Calendar.MONTH));// 8(8月)
// roll()方法会加日,但是月份不会改变
Calendar calendar2 = Calendar.getInstance();
calendar2.roll(Calendar.DATE,34);//以日为单位,增加34天
System.out.println("操作后的日:" + calendar2.get(Calendar.DATE));// 1
System.out.println("操作后的月(依然是操作前的月,从0开始计数):" + calendar2.get(Calendar.MONTH));//6(7月)

// 设置对象的年月日内容
calendar.set(1999, 1, 20);
System.out.println(calendar.get(Calendar.DATE));//20
System.out.println(calendar.get(Calendar.MONTH));//1
System.out.println(calendar.get(Calendar.YEAR));//1999

// set()修改了什么内容才会变内容,没有修改的还是set前的内容
System.out.println("小时:" + calendar.get(Calendar.HOUR_OF_DAY));//15

// 内容格式化,需转化成Date
Date time = calendar.getTime();
SimpleDateFormat sdf =new SimpleDateFormat("yyyy--MM--dd HH::mm::ss");
// 格式化后,月会变为当前月,不是从0开始计数的内容
System.out.println(sdf.format(time));// 1999--02--20 15::19::16
// 比大小,必须全是Calendar对象,否则,返回false
System.out.println(calendar.after(calendar2));
System.out.println(calendar.before(calendar1));
// 前者后于后者,返回1,前者先于后者,返回-1,前者等于后者,返回0
System.out.println(calendar.compareTo(calendar));

Instant

//时间相差
Instant inst1 = Instant.now();//获取当前瞬时时间
// 当前时间戳 : 2022-07-29T06:16:18.710Z
System.out.println("当前时间戳 : " + inst1);
Instant inst2 = inst1.plus(Duration.ofSeconds(10));//指定时间加10秒
// 增加之后的时间 : 2022-07-29T06:16:28.710Z
System.out.println("增加之后的时间 : " + inst2);
// 相差毫秒 : 10000
System.out.println("相差毫秒 : " + Duration.between(inst1, inst2).toMillis());
// 相毫秒 : 10
System.out.println("相毫秒 : " + Duration.between(inst1, inst2).getSeconds());
// 相差毫秒1 : -10000
System.out.println("相差毫秒1 : " + Duration.between(inst2, inst1).toMillis());
// 相毫秒1 : -10
System.out.println("相毫秒1 : " + Duration.between(inst2, inst1).getSeconds());

时间操作类之间的互相转换

LocalDateTime -> LocalDate

LocalDate localDate = localDateTime.toLocalDate();

LocalDateTime -> Date

// 从默认时区的系统时钟获取当前的日期时间
LocalDateTime localDateTime = LocalDateTime.now();
// 将此日期时间与时区相结合以创建 ZonedDateTime
ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.systemDefault());
// 本地时间线LocalDateTime到即时时间线Instant时间戳
Instant instant = zonedDateTime.toInstant();
// UTC时间(世界协调时间,UTC + 00:00)转北京(北京,UTC + 8:00)时间
Date date = Date.from(instant);

LocalDateTime -> Instance

Instant instant = Instant.from(LocalDateTime.now());

Date -> LocalDateTime/LocalDate

Date date = new Date();
Instant instant = date.toInstant();
//Date转换为LocalDateTime
LocalDateTime localDateTime = LocalDateTime
								.ofInstant(
									instant, 
									ZoneId.systemDefault()
								);
//获取LocalDate
LocalDate localDate = localDateTime.toLocalDate();

Date -> Calendar

Date date = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date );

Date -> Instant

Date date = new Date();
Instant instant = date.toInstant();

Calendar -> Date

Calendar calendar = Calendar.getInstance();  
Date date = calendar.getTime();

Calendar -> LocalDateTime

Calendar calendar = Calendar.getInstance();  
LocalDateTime thisDateTime = LocalDateTime
								.ofInstant(
									calendar, 
									ZoneOffset.systemDefault()
								); 

Instant -> LocalDateTime/LocalDate

LocalDateTime localDateTime = LocalDateTime
								.ofInstant(
									Instant.now(), 
									ZoneId.systemDefault()
								); 

Instant -> Date

Date date = Date.from(Instant.now());

Date -> String

使用 SimpleDateFormat 格式转化列表

格式结果
yyyy/MM/dd HH:mm:ss2023/10/11 09:51:00
yyyy.MM.dd HH:mm:ss2023.10.11 09:51:00
yyyy年MM月dd日 HH时mm分ss秒2023年10月11日 09时51分00秒
yyyy-MM-dd2023-10-11
yyyy/MM/dd2023/10/11
yyyy.MM.dd2023.10.11
HH:mm:ss09:51:00
HH时mm分ss秒09时51分00秒
yyyy-MM-dd HH:mm2023-10-11 09:51
yyyy-MM-dd HH:mm:ss.SSS2023-10-11 09:51:00.309
yyyyMMddHHmmss20231011095100
yyyyMMddHHmmssSSS20231011095100310
yyyyMMdd20231011
EEE, dd MMM yyyy HH:mm:ss z星期三, 11 十月 2023 09:51:00 CST
EEE MMM dd HH:mm:ss zzz yyyy星期三 十月 11 09:51:00 CST 2023
yyyy-MM-dd’T’HH:mm:ss’Z’2023-10-11T09:51:00Z
yyyy-MM-dd’T’HH:mm:ss.SSS’Z’2023-10-11T09:51:00.312Z
yyyy-MM-dd’T’HH:mm:ssZ2023-10-11T09:51:00+0800
yyyy-MM-dd’T’HH:mm:ss.SSSZ2023-10-11T09:51:00.312+0800
yyyy-MM-dd’T’HH:mm:ssXXX2023-10-11T09:51:00+08:00
yyyy-MM-dd’T’HH:mm:ss.SSSX2024-01-26T14:50:45.798+08

代码验证

SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
System.out.println(simpleDateFormat.format(new Date()));
simpleDateFormat = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
System.out.println(simpleDateFormat.format(new Date()));
simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
System.out.println(simpleDateFormat.format(new Date()));
simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(simpleDateFormat.format(new Date()));
simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd");
System.out.println(simpleDateFormat.format(new Date()));
simpleDateFormat = new SimpleDateFormat("yyyy.MM.dd");
System.out.println(simpleDateFormat.format(new Date()));
simpleDateFormat = new SimpleDateFormat("HH:mm:ss");
System.out.println(simpleDateFormat.format(new Date()));
simpleDateFormat = new SimpleDateFormat("HH时mm分ss秒");
System.out.println(simpleDateFormat.format(new Date()));
simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
System.out.println(simpleDateFormat.format(new Date()));
simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
System.out.println(simpleDateFormat.format(new Date()));
simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
System.out.println(simpleDateFormat.format(new Date()));
simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS");
System.out.println(simpleDateFormat.format(new Date()));
simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
System.out.println(simpleDateFormat.format(new Date()));
simpleDateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z");
System.out.println(simpleDateFormat.format(new Date()));
simpleDateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");
System.out.println(simpleDateFormat.format(new Date()));
simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
System.out.println(simpleDateFormat.format(new Date()));
simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
System.out.println(simpleDateFormat.format(new Date()));
simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
System.out.println(simpleDateFormat.format(new Date()));
simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
System.out.println(simpleDateFormat.format(new Date()));
simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
System.out.println(simpleDateFormat.format(new Date()));
simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");
System.out.println(simpleDateFormat.format(new Date()));

String -> Date

根据上面【Date -> String】的内容,相反的,使用SimpleDateFormat.parse();方法即可实现字符串到时间格式的转化
注意:

  1. 2024-01-26T06:08:23.993ZUTC格式的时间字符串转化为系统时区的时间,需要使用如下代码:
new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX").parse("2024-01-26T06:08:23.993Z")

希望大家有其他文章中没有提到的常用时间用法,可以给我留言,让这篇文章更丰富,也能通过这一篇文章就能解决大家平时开发常使用的一些时间转化操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值