5hutool实战:DateUtil-解析被格式化的时间
Posted 小虚竹
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5hutool实战:DateUtil-解析被格式化的时间相关的知识,希望对你有一定的参考价值。
技术活,该赏
关注+一键三连(点赞,评论,收藏)再看,养成好习惯
用途:格式化时间
使用场景
把日期按照不同的需求格式化成对应的日期字符串
项目引用
此博文的依据:hutool-5.6.5版本源码
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-core</artifactId>
<version>5.6.5</version>
</dependency>
方法摘要
方法明细
方法名称:cn.hutool.core.date.DateUtil.parseLocalDateTime(java.lang.CharSequence)
方法描述
构建LocalDateTime对象
格式:yyyy-MM-dd HH:mm:ss
支持版本及以上
参数描述:
参数名 | 描述 |
---|---|
CharSequence dateStr |
dateStr 时间字符串(带格式)
|
返回值:
LocalDateTime对象
参考案例:
// 测试字符串与LocalDateTime的互相转换
String strDate = "2019-12-01 17:02:30";
LocalDateTime ldt = DateUtil.parseLocalDateTime(strDate);
String strDate1 = DateUtil.formatLocalDateTime(ldt);
Assert.assertEquals(strDate, strDate1);
String strDate2 = "2019-12-01 17:02:30.111";
ldt = DateUtil.parseLocalDateTime(strDate2, DatePattern.NORM_DATETIME_MS_PATTERN);
strDate1 = DateUtil.format(ldt, DatePattern.NORM_DATETIME_PATTERN);
Assert.assertEquals(strDate, strDate1);
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.parseLocalDateTime(java.lang.CharSequence, java.lang.String)
方法描述
构建LocalDateTime对象
支持版本及以上
参数描述:
参数名 | 描述 |
---|---|
CharSequence dateStr |
dateStr 时间字符串(带格式)
|
String format |
format 使用{@link DatePattern}定义的格式
|
返回值:
LocalDateTime对象
参考案例:
// 测试字符串与LocalDateTime的互相转换
String strDate = "2019-12-01 17:02:30";
LocalDateTime ldt = DateUtil.parseLocalDateTime(strDate);
String strDate1 = DateUtil.formatLocalDateTime(ldt);
Assert.assertEquals(strDate, strDate1);
String strDate2 = "2019-12-01 17:02:30.111";
ldt = DateUtil.parseLocalDateTime(strDate2, DatePattern.NORM_DATETIME_MS_PATTERN);
strDate1 = DateUtil.format(ldt, DatePattern.NORM_DATETIME_PATTERN);
Assert.assertEquals(strDate, strDate1);
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.parse(java.lang.CharSequence, java.text.DateFormat)
方法描述
构建DateTime对象
支持版本及以上
参数描述:
参数名 | 描述 |
---|---|
CharSequence dateStr |
dateStr Date字符串
|
DateFormat dateFormat |
dateFormat 格式化器 {@link SimpleDateFormat}
|
返回值:
DateTime对象
参考案例:
String str = "31-Aug-2020";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd-MMM-yyyy", Locale.US);
//temporalAccessor {@link TemporalAccessor},常用子类: {@link LocalDateTime}、 LocalDate
LocalDateTime localDateTime = LocalDate.parse(str, dtf).atStartOfDay();
Date date1 = DateUtil.date(localDateTime);
System.out.println(date1);
Assert.assertNotNull(date1);
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.parse(java.lang.CharSequence, cn.hutool.core.date.format.DateParser)
方法描述
构建DateTime对象
支持版本及以上
参数描述:
参数名 | 描述 |
---|---|
CharSequence dateStr |
dateStr Date字符串
|
DateParser parser |
parser 格式化器,{@link FastDateFormat}
|
返回值:
DateTime对象
参考案例:
String dateStr = "Wed Sep 16 11:26:23 CST 2009";
SimpleDateFormat sdf = new SimpleDateFormat(DatePattern.JDK_DATETIME_PATTERN, Locale.US);
sdf.setTimeZone(TimeZone.getTimeZone("America/Chicago"));
final DateTime parse = DateUtil.parse(dateStr, sdf);
FastDateFormat fdf = FastDateFormat.getInstance(DatePattern.JDK_DATETIME_PATTERN, TimeZone.getTimeZone("America/Chicago"), Locale.US);
final DateTime parse2 = DateUtil.parse(dateStr, fdf);
Assert.assertEquals(parse, parse2);
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.parse(java.lang.CharSequence, java.time.format.DateTimeFormatter)
方法描述
构建DateTime对象
支持版本及以上
5.0.0
参数描述:
参数名 | 描述 |
---|---|
CharSequence dateStr |
dateStr Date字符串
|
DateTimeFormatter formatter |
formatter 格式化器,{@link DateTimeFormatter}
|
返回值:
DateTime对象
参考案例:
String str = "31-Aug-2020";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd-MMM-yyyy", Locale.US);
//temporalAccessor {@link TemporalAccessor},常用子类: {@link LocalDateTime}、 LocalDate
LocalDateTime localDateTime = LocalDate.parse(str, dtf).atStartOfDay();
Date date1 = DateUtil.date(localDateTime);
System.out.println(date1);
Assert.assertNotNull(date1);
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.parse(java.lang.CharSequence, java.lang.String)
方法描述
将特定格式的日期转换为Date对象
支持版本及以上
参数描述:
参数名 | 描述 |
---|---|
CharSequence dateStr |
dateStr 特定格式的日期
|
String format |
format 格式,例如yyyy-MM-dd
|
返回值:
日期对象
参考案例:
String ymd = DateUtil.parse("2019-3-21 12:20:15", "yyyy-MM-dd").toString(DatePattern.PURE_DATE_PATTERN);
Assert.assertEquals("20190321", ymd);
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.parse(java.lang.CharSequence, java.lang.String, java.util.Locale)
方法描述
将特定格式的日期转换为Date对象
支持版本及以上
4.5.18
参数描述:
参数名 | 描述 |
---|---|
CharSequence dateStr |
dateStr 特定格式的日期
|
String format |
format 格式,例如yyyy-MM-dd
|
Locale locale |
locale 区域信息
|
返回值:
日期对象
参考案例:
String ymd = DateUtil.parse("2021-05-16 21:20:15", "yyyy-MM-dd",Locale.US).toString(DatePattern.PURE_DATE_PATTERN);
Assert.assertEquals("20210516", ymd);
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.parse(java.lang.String, java.lang.String[])
方法描述
通过给定的日期格式解析日期时间字符串。
传入的日期格式会逐个尝试,直到解析成功,返回{@link DateTime}对象,否则抛出{@link DateException}异常。
支持版本及以上
5.3.11
参数描述:
参数名 | 描述 |
---|---|
String str |
str 日期时间字符串,非空
|
java.lang.String[] parsePatterns |
parsePatterns 需要尝试的日期时间格式数组,非空, 见SimpleDateFormat
|
返回值:
解析后的Date
参考案例:
String ymd = DateUtil.parse("2021-05-16 21:20:15", "yyyy/MM/dd HH:mm:ss","yyyy.MM.dd HH:mm:ss","yyyy-MM-dd HH:mm:ss").toString(DatePattern.PURE_DATE_PATTERN);
Assert.assertEquals("20210516", ymd);
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.parseDateTime(java.lang.CharSequence)
方法描述
解析日期时间字符串,格式支持:
yyyy-MM-dd HH:mm:ss yyyy/MM/dd HH:mm:ss yyyy.MM.dd HH:mm:ss yyyy年MM月dd日 HH:mm:ss
支持版本及以上
参数描述:
参数名 | 描述 |
---|---|
CharSequence dateString |
dateString 标准形式的时间字符串
|
返回值:
日期对象
参考案例:
DateTime dateTime =DateUtil.parseDateTime("2021-05-16 21:20:15");
Assert.assertEquals("2021-05-16 21:20:15", dateTime.toString("yyyy-MM-dd HH:mm:ss"));
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.parseDate(java.lang.CharSequence)
方法描述
解析日期字符串,忽略时分秒,支持的格式包括:
yyyy-MM-dd yyyy/MM/dd yyyy.MM.dd yyyy年MM月dd日
支持版本及以上
参数描述:
参数名 | 描述 |
---|---|
CharSequence dateString |
dateString 标准形式的日期字符串
|
返回值:
日期对象
参考案例:
String beginStr = "2020-03-11";
DateTime date = DateUtil.parseDate(beginStr);
Calendar calendar = date.toCalendar();
final Calendar begin = DateUtil.beginOfWeek(calendar, false);
Assert.assertEquals("2020-03-08 00:00:00", DateUtil.date(begin).toString());
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.parseTime(java.lang.CharSequence)
方法描述
解析时间,格式HH:mm:ss,日期部分默认为1970-01-01
支持版本及以上
参数描述:
参数名 | 描述 |
---|---|
CharSequence timeString |
timeString 标准形式的日期字符串
|
返回值:
日期对象
参考案例:
String beginStr = "22:10:00";
DateTime date = DateUtil.parseTime(beginStr);
System.out.println(date);
Assert.assertEquals("1970-01-01 22:10:00", date.toString());
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.parseTimeToday(java.lang.CharSequence)
方法描述
解析时间,格式HH:mm 或 HH:mm:ss,日期默认为今天
支持版本及以上
3.1.1
参数描述:
参数名 | 描述 |
---|---|
CharSequence timeString |
timeString 标准形式的日期字符串
|
返回值:
日期对象
参考案例:
String beginStr = "22:10:00";
DateTime date = DateUtil.parseTimeToday(beginStr);
System.out.println(date);
String str = "2021-05-16 22:10:00";
Date today = DateUtil.parse(str);
Assert.assertEquals(DateUtil.format(today,"yyyy-MM-dd HH:mm:ss"), date.toString());
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.parseUTC(java.lang.String)
方法描述
解析UTC时间,格式:
- yyyy-MM-dd'T'HH:mm:ss'Z'
- yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
- yyyy-MM-dd'T'HH:mm:ssZ
- yyyy-MM-dd'T'HH:mm:ss.SSSZ
支持版本及以上
4.1.14
参数描述:
参数名 | 描述 |
---|---|
String utcString |
utcString UTC时间
|
返回值:
日期对象
参考案例:
String dateStr1 = "2018-09-13T05:34:31Z";
DateTime dt = DateUtil.parseUTC(dateStr1);
// parse方法支持UTC格式测试
DateTime dt2 = DateUtil.parse(dateStr1);
Assert.assertEquals(dt, dt2);
// 默认使用Pattern对应的时区,即UTC时区
String dateStr = dt.toString();
Assert.assertEquals("2018-09-13 05:34:31", dateStr);
// 使用当前(上海)时区
dateStr = dt.toString(TimeZone.getTimeZone("GMT+8:00"));
Assert.assertEquals("2018-09-13 13:34:31", dateStr);
dateStr1 = "2018-09-13T13:34:32+0800";
dt = DateUtil.parseUTC(dateStr1);
dateStr = dt.toString(TimeZone.getTimeZone("GMT+8:00"));
Assert.assertEquals("2018-09-13 13:34:32", dateStr);
dateStr1 = "2018-09-13T13:34:33+08:00";
dt = DateUtil.parseUTC(dateStr1);
dateStr = dt.toString(TimeZone.getTimeZone("GMT+8:00"));
Assert.assertEquals("2018-09-13 13:34:33", dateStr);
dateStr1 = "2018-09-13T13:34:34+0800";
dt = DateUtil.parse(dateStr1);
assert dt != null;
dateStr = dt.toString(TimeZone.getTimeZone("GMT+8:00"));
Assert.assertEquals("2018-09-13 13:34:34", dateStr);
dateStr1 = "2018-09-13T13:34:35+08:00";
dt = DateUtil.parse(dateStr1);
assert dt != null;
dateStr = dt.toString(TimeZone.getTimeZone("GMT+8:00"));
Assert.assertEquals("2018-09-13 13:34:35", dateStr);
dateStr1 = "2018-09-13T13:34:36.999+0800";
dt = DateUtil.parseUTC(dateStr1);
final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DatePattern.NORM_DATETIME_MS_PATTERN);
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT+8:00"));
dateStr = dt.toString(simpleDateFormat);
Assert.assertEquals("2018-09-13 13:34:36.999", dateStr);
dateStr1 = "2018-09-13T13:34:37.999+08:00";
dt = DateUtil.parseUTC(dateStr1);
dateStr = dt.toString(simpleDateFormat);
Assert.assertEquals("2018-09-13 13:34:37.999", dateStr);
dateStr1 = "2018-09-13T13:34:38.999+0800";
dt = DateUtil.parse(dateStr1);
assert dt != null;
dateStr = dt.toString(simpleDateFormat);
Assert.assertEquals("2018-09-13 13:34:38.999", dateStr);
dateStr1 = "2018-09-13T13:34:39.999+08:00";
dt = DateUtil.parse(dateStr1);
assert dt != null;
dateStr = dt.toString(simpleDateFormat);
Assert.assertEquals("2018-09-13 13:34:39.999", dateStr);
// 使用UTC时区
dateStr1 = "2018-09-13T13:34:39.99";
dt = DateUtil.parse(dateStr1);
assert dt != null;
dateStr = dt.toString();
Assert.assertEquals("2018-09-13 13:34:39", dateStr);
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.parseCST(java.lang.CharSequence)
方法描述
解析CST时间,格式:
- EEE MMM dd HH:mm:ss z yyyy(例如:Wed Aug 01 00:00:00 CST 2012)
支持版本及以上
4.6.9
参数描述:
参数名 | 描述 |
---|---|
CharSequence cstString |
cstString UTC时间
|
返回值:
日期对象
参考案例:
String dateStr = "Wed Sep 16 11:26:23 CST 2009";
SimpleDateFormat sdf = new SimpleDateFormat(DatePattern.JDK_DATETIME_PATTERN, Locale.US);
final DateTime parse = DateUtil.parse(dateStr, sdf);
DateTime dateTime = DateUtil.parseCST(dateStr);
Assert.assertEquals(parse, dateTime);
dateTime = DateUtil.parse(dateStr);
Assert.assertEquals(parse, dateTime);
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.parse(java.lang.CharSequence)
方法描述
将日期字符串转换为{@link DateTime}对象,格式:
- yyyy-MM-dd HH:mm:ss
- yyyy/MM/dd HH:mm:ss
- yyyy.MM.dd HH:mm:ss
- yyyy年MM月dd日 HH时mm分ss秒
- yyyy-MM-dd
- yyyy/MM/dd
- yyyy.MM.dd
- HH:mm:ss
- HH时mm分ss秒
- yyyy-MM-dd HH:mm
- yyyy-MM-dd HH:mm:ss.SSS
- yyyyMMddHHmmss
- yyyyMMddHHmmssSSS
- yyyyMMdd
- EEE, dd MMM yyyy HH:mm:ss z
- EEE MMM dd HH:mm:ss zzz yyyy
- yyyy-MM-dd'T
以上是关于5hutool实战:DateUtil-解析被格式化的时间的主要内容,如果未能解决你的问题,请参考以下文章
5hutool实战:IoUtil 流操作工具类(将内容写到流中)
5hutool实战:IoUtil 流操作工具类(将内容写到流中)