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:ss | 2023/10/11 09:51:00 |
yyyy.MM.dd HH:mm:ss | 2023.10.11 09:51:00 |
yyyy年MM月dd日 HH时mm分ss秒 | 2023年10月11日 09时51分00秒 |
yyyy-MM-dd | 2023-10-11 |
yyyy/MM/dd | 2023/10/11 |
yyyy.MM.dd | 2023.10.11 |
HH:mm:ss | 09:51:00 |
HH时mm分ss秒 | 09时51分00秒 |
yyyy-MM-dd HH:mm | 2023-10-11 09:51 |
yyyy-MM-dd HH:mm:ss.SSS | 2023-10-11 09:51:00.309 |
yyyyMMddHHmmss | 20231011095100 |
yyyyMMddHHmmssSSS | 20231011095100310 |
yyyyMMdd | 20231011 |
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:ssZ | 2023-10-11T09:51:00+0800 |
yyyy-MM-dd’T’HH:mm:ss.SSSZ | 2023-10-11T09:51:00.312+0800 |
yyyy-MM-dd’T’HH:mm:ssXXX | 2023-10-11T09:51:00+08:00 |
yyyy-MM-dd’T’HH:mm:ss.SSSX | 2024-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();
方法即可实现字符串到时间格式的转化
注意:
- 将
2024-01-26T06:08:23.993Z
UTC格式的时间字符串转化为系统时区的时间,需要使用如下代码:
new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX").parse("2024-01-26T06:08:23.993Z")
希望大家有其他文章中没有提到的常用时间用法,可以给我留言,让这篇文章更丰富,也能通过这一篇文章就能解决大家平时开发常使用的一些时间转化操作。