5hutool实战:DateUtil-解析被格式化的时间

Posted 小虚竹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5hutool实战:DateUtil-解析被格式化的时间相关的知识,希望对你有一定的参考价值。

技术活,该赏
关注+一键三连(点赞,评论,收藏)再看,养成好习惯

hutool实战(带你掌握里面的各种工具)目录


用途:格式化时间

使用场景

把日期按照不同的需求格式化成对应的日期字符串

项目引用

此博文的依据: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对象<br> 格式:yyyy-MM-dd HH:mm:ss
cn.hutool.core.date.DateUtil.parseLocalDateTime(java.lang.CharSequence, java.lang.String)
构建LocalDateTime对象
cn.hutool.core.date.DateUtil.parse(java.lang.CharSequence, java.text.DateFormat)
构建DateTime对象
cn.hutool.core.date.DateUtil.parse(java.lang.CharSequence, cn.hutool.core.date.format.DateParser)
构建DateTime对象
cn.hutool.core.date.DateUtil.parse(java.lang.CharSequence, java.time.format.DateTimeFormatter)
构建DateTime对象
cn.hutool.core.date.DateUtil.parse(java.lang.CharSequence, java.lang.String)
将特定格式的日期转换为Date对象
cn.hutool.core.date.DateUtil.parse(java.lang.CharSequence, java.lang.String, java.util.Locale)
将特定格式的日期转换为Date对象
cn.hutool.core.date.DateUtil.parse(java.lang.String, java.lang.String[])
通过给定的日期格式解析日期时间字符串。<br> 传入的日期格式会逐个尝试,直到解析成功,返回{@link DateTime}对象,否则抛出{@link DateException}异常。
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 
cn.hutool.core.date.DateUtil.parseDate(java.lang.CharSequence)
解析日期字符串,忽略时分秒,支持的格式包括:
 yyyy-MM-dd yyyy/MM/dd yyyy.MM.dd yyyy年MM月dd日 
cn.hutool.core.date.DateUtil.parseTime(java.lang.CharSequence)
解析时间,格式HH:mm:ss,日期部分默认为1970-01-01
cn.hutool.core.date.DateUtil.parseTimeToday(java.lang.CharSequence)
解析时间,格式HH:mm 或 HH:mm:ss,日期默认为今天
cn.hutool.core.date.DateUtil.parseUTC(java.lang.String)
解析UTC时间,格式:<br>
  1. yyyy-MM-dd’T’HH:mm:ss’Z’
  2. yyyy-MM-dd’T’HH:mm:ss.SSS’Z’
  3. yyyy-MM-dd’T’HH:mm:ssZ
  4. yyyy-MM-dd’T’HH:mm:ss.SSSZ
cn.hutool.core.date.DateUtil.parseCST(java.lang.CharSequence)
解析CST时间,格式:<br>
  1. EEE MMM dd HH:mm:ss z yyyy(例如:Wed Aug 01 00:00:00 CST 2012)
cn.hutool.core.date.DateUtil.parse(java.lang.CharSequence)
将日期字符串转换为{@link DateTime}对象,格式:<br>
  1. yyyy-MM-dd HH:mm:ss
  2. yyyy/MM/dd HH:mm:ss
  3. yyyy.MM.dd HH:mm:ss
  4. yyyy年MM月dd日 HH时mm分ss秒
  5. yyyy-MM-dd
  6. yyyy/MM/dd
  7. yyyy.MM.dd
  8. HH:mm:ss
  9. HH时mm分ss秒
  10. yyyy-MM-dd HH:mm
  11. yyyy-MM-dd HH:mm:ss.SSS
  12. yyyyMMddHHmmss
  13. yyyyMMddHHmmssSSS
  14. yyyyMMdd
  15. EEE, dd MMM yyyy HH:mm:ss z
  16. EEE MMM dd HH:mm:ss zzz yyyy
  17. yyyy-MM-dd’T’HH:mm:ss’Z’
  18. yyyy-MM-dd’T’HH:mm:ss.SSS’Z’
  19. yyyy-MM-dd’T’HH:mm:ssZ
  20. yyyy-MM-dd’T’HH:mm:ss.SSSZ

方法明细

方法名称:cn.hutool.core.date.DateUtil.parseLocalDateTime(java.lang.CharSequence)

方法描述

构建LocalDateTime对象<br>
格式: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[])

方法描述

通过给定的日期格式解析日期时间字符串。<br>
传入的日期格式会逐个尝试,直到解析成功,返回{@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时间,格式:<br>

  1. yyyy-MM-dd'T'HH:mm:ss'Z'
  2. yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
  3. yyyy-MM-dd'T'HH:mm:ssZ
  4. 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时间,格式:<br>

  1. 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}对象,格式:<br>

  1. yyyy-MM-dd HH:mm:ss
  2. yyyy/MM/dd HH:mm:ss
  3. yyyy.MM.dd HH:mm:ss
  4. yyyy年MM月dd日 HH时mm分ss秒
  5. yyyy-MM-dd
  6. yyyy/MM/dd
  7. yyyy.MM.dd
  8. HH:mm:ss
  9. HH时mm分ss秒
  10. yyyy-MM-dd HH:mm
  11. yyyy-MM-dd HH:mm:ss.SSS
  12. yyyyMMddHHmmss
  13. yyyyMMddHHmmssSSS
  14. yyyyMMdd
  15. EEE, dd MMM yyyy HH:mm:ss z
  16. EEE MMM dd HH:mm:ss zzz yyyy
  17. yyyy-MM-dd'T'HH:mm:ss'Z'
  18. yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
  19. yyyy-MM-dd'T'HH:mm:ssZ
  20. yyyy-MM-dd'T'HH:mm:ss.SSSZ

支持版本及以上

参数描述:

参数名描述
CharSequence dateCharSequence
dateCharSequence 日期字符串

返回值:

日期

参考案例:

		String str ="2021-05-16 22:25:00";
		System.out.println(DateUtil.parse(str));
		str ="2021年05月16日 22时25分00秒";
		System.out.println(DateUtil.parse(str));

源码解析:

链接:待补充

以上是关于5hutool实战:DateUtil-解析被格式化的时间的主要内容,如果未能解决你的问题,请参考以下文章

5hutool实战:IoUtil 流操作工具类(将内容写到流中)

5hutool实战:IoUtil 流操作工具类(将内容写到流中)

4hutool实战:DateUtil-格式化时间

4hutool实战:DateUtil-格式化时间

4hutool源码分析:DateUtil(时间工具类)-格式化时间(万字长文源码分析,学大佬如何写代码)

4hutool源码分析:DateUtil(时间工具类)-格式化时间(万字长文源码分析,学大佬如何写代码)