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

举报
小虚竹 发表于 2021/10/18 23:03:55 2021/10/18
【摘要】 技术活,该赏 关注+一键三连(点赞,评论,收藏)再看,养成好习惯 12 hutool实战(带你掌握里面的各种工具)目录 万字博文教你搞懂java源码的日期和时间相关用法 用途:格式化时间 使用...
技术活,该赏
关注+一键三连(点赞,评论,收藏)再看,养成好习惯

  
 
  • 1
  • 2

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

万字博文教你搞懂java源码的日期和时间相关用法


用途:格式化时间

使用场景

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

项目引用

此博文的依据:hutool-5.6.5版本源码

        <dependency>
			<groupId>cn.hutool</groupId>
			<artifactId>hutool-core</artifactId>
			<version>5.6.5</version>
		</dependency>

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

方法摘要

方法 描述
cn.hutool.core.date.DateUtil.parseLocalDateTime(java.lang.CharSequence)
构建LocalDateTime对象
格式: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[])
通过给定的日期格式解析日期时间字符串。
传入的日期格式会逐个尝试,直到解析成功,
返回{@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时间,格式:
  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时间,格式:
  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}对象,格式:
  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对象

格式: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);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

源码解析:

链接:待补充

  
 
  • 1

方法明细

方法名称: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);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

源码解析:

链接:待补充

  
 
  • 1

方法明细

方法名称: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);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

源码解析:

链接:待补充

  
 
  • 1

方法明细

方法名称: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);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

源码解析:

链接:待补充

  
 
  • 1

方法明细

方法名称: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);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

源码解析:

链接:待补充

  
 
  • 1

方法明细

方法名称: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);

  
 
  • 1
  • 2

源码解析:

链接:待补充

  
 
  • 1

方法明细

方法名称: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);

  
 
  • 1
  • 2

源码解析:

链接:待补充

  
 
  • 1

方法明细

方法名称: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);

  
 
  • 1
  • 2

源码解析:

链接:待补充

  
 
  • 1

方法明细

方法名称: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"));

  
 
  • 1
  • 2

源码解析:

链接:待补充

  
 
  • 1

方法明细

方法名称: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());

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

源码解析:

链接:待补充

  
 
  • 1

方法明细

方法名称: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());

  
 
  • 1
  • 2
  • 3
  • 4

源码解析:

链接:待补充

  
 
  • 1

方法明细

方法名称: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());

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

源码解析:

链接:待补充

  
 
  • 1

方法明细

方法名称: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 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);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67

源码解析:

链接:待补充

  
 
  • 1

方法明细

方法名称: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 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);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

源码解析:

链接:待补充

  
 
  • 1

方法明细

方法名称: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 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));

  
 
  • 1
  • 2
  • 3
  • 4

源码解析:

链接:待补充

  
 
  • 1

文章来源: xiaoxuzhu.blog.csdn.net,作者:小虚竹,版权归原作者所有,如需转载,请联系作者。

原文链接:xiaoxuzhu.blog.csdn.net/article/details/117305724

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。