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

x33g5p2x  于2021-12-18 转载在 其他  
字(12.9k)|赞(0)|评价(0)|浏览(1109)

用途:格式化时间

使用场景

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

项目引用

此博文的依据: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> 传入的日期格式会逐个尝试,直到解析成功, <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><br><br>1. yyyy-MM-dd’T’HH:mm:ss’Z’<br>1. yyyy-MM-dd’T’HH:mm:ss.SSS’Z’<br>1. yyyy-MM-dd’T’HH:mm:ssZ<br>1. yyyy-MM-dd’T’HH:mm:ss.SSSZ |
| cn.hutool.core.date.DateUtil.parseCST(java.lang.CharSequence) | 解析CST时间,格式: <br><br><br>1. EEE MMM dd HH:mm:ss z yyyy<br> (例如:Wed Aug 01 00:00:00 CST 2012) |
| cn.hutool.core.date.DateUtil.parse(java.lang.CharSequence) | 将日期字符串转换为{@link DateTime}对象,格式: <br><br><br>1. yyyy-MM-dd HH:mm:ss<br>1. yyyy/MM/dd HH:mm:ss<br>1. yyyy.MM.dd HH:mm:ss<br>1. yyyy年MM月dd日 HH时mm分ss秒<br>1. yyyy-MM-dd<br>1. yyyy/MM/dd<br>1. yyyy.MM.dd<br>1. HH:mm:ss<br>1. HH时mm分ss秒<br>1. yyyy-MM-dd HH:mm<br>1. yyyy-MM-dd HH:mm:ss.SSS<br>1. yyyyMMddHHmmss<br>1. yyyyMMddHHmmssSSS<br>1. yyyyMMdd<br>1. EEE, dd MMM yyyy HH:mm:ss z<br>1. EEE MMM dd HH:mm:ss zzz yyyy<br>1. yyyy-MM-dd’T’HH:mm:ss’Z’<br>1. yyyy-MM-dd’T’HH:mm:ss.SSS’Z’<br>1. yyyy-MM-dd’T’HH:mm:ssZ<br>1. yyyy-MM-dd’T’HH:mm:ss.SSSZ |

方法明细

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

方法描述

构建LocalDateTime对象

格式:yyyy-MM-dd HH:mm:ss

支持版本及以上

参数描述:

参数名描述
CharSequence dateStrdateStr 时间字符串(带格式)

返回值:

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 dateStrdateStr 时间字符串(带格式)
String formatformat 使用{@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 dateStrdateStr Date字符串
DateFormat dateFormatdateFormat 格式化器 {@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 dateStrdateStr Date字符串
DateParser parserparser 格式化器,{@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 dateStrdateStr Date字符串
DateTimeFormatter formatterformatter 格式化器,{@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 dateStrdateStr 特定格式的日期
String formatformat 格式,例如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 dateStrdateStr 特定格式的日期
String formatformat 格式,例如yyyy-MM-dd
Locale localelocale 区域信息

返回值:

日期对象

参考案例:

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 strstr 日期时间字符串,非空
java.lang.String[] parsePatternsparsePatterns 需要尝试的日期时间格式数组,非空, 见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 dateStringdateString 标准形式的时间字符串

返回值:

日期对象

参考案例:

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 dateStringdateString 标准形式的日期字符串

返回值:

日期对象

参考案例:

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 timeStringtimeString 标准形式的日期字符串

返回值:

日期对象

参考案例:

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 timeStringtimeString 标准形式的日期字符串

返回值:

日期对象

参考案例:

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时间,格式:

  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 utcStringutcString 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时间,格式:

  1. EEE MMM dd HH:mm:ss z yyyy(例如:Wed Aug 01 00:00:00 CST 2012)

支持版本及以上

4.6.9

参数描述:

参数名描述
CharSequence cstStringcstString 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}对象,格式:

  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 dateCharSequencedateCharSequence 日期字符串

返回值:

日期

参考案例:

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));

源码解析:

链接:待补充

相关文章