yyyy-MM-dd‘T‘HH:mm:ss - 里面的‘T‘是什么意思

一、原因:今天在编写junit测试的时候发现有个日期一直显示解析失败(如下图),查看具体代码之后发现是日期格式的问题,日期格式是:
yyyy'-'MM'-'dd'T'HH':'mm':'ss

失败提示:

java.text.ParseException: Unparseable date: "2020-07-19 09:00:00"
	at java.text.DateFormat.parse(Unknown Source)
	at com.hkt.cch8.drgo.DrgoApplicationTests.main(DrgoApplicationTests.java:25)
二、原理:这个格式还是第一次见到,与平时的格式相比只是多了一个'T',我觉得这个应该是一个代表时间开始的标记。然后再官网上Combined date and time representations找到具体解析。官网上是英文的,翻译后如下:

单个时间点可以通过连接完整的日期表达式、字母“T”作为分隔符和有效的时间表达式来表示。例如,“2007-04-05T14:30”。如“200704051430”中所述,经双方同意,允许省略“T”字符。[31]ISO 8601中不允许使用空格等其他字符分隔日期和时间部分,但允许在其配置文件RFC 3339中使用。[32]
如果需要时区指示符,它将跟随合并的日期和时间。例如,“2007-04-05T14:30Z”或“2007-04-05T12:30-02:00”。
可以使用基本格式或扩展格式,但日期和时间必须使用相同的格式。日期表达式可以是日历、周或序数,并且必须使用完整的表示形式。时间可以用指定的降低精度的格式来表示。[17]

持续时间定义了一个时间间隔中的干预时间量,并用格式P[n]Y[n]M[n]DT[n]H[n]M[n]S或P[n]W表示。在这些表示中,[n]被后面的每个日期和时间元素的值替换。不需要前导零,但每个元素的最大位数应由通信方商定。大写字母P、Y、M、W、D、T、H、M和S是每个日期和时间元素的指示符,不会被替换。
P是放置在持续时间表示开始处的持续时间指示符(表示期间)。
Y是年数值之后的年份指示符。
M是月数值之后的月份指示符。
W是周数值之后的周指示符。
D是天数值后面的日期指示符。
T是表示的时间分量之前的时间指示符。
H是小时数值之后的小时指示符。
M是分钟数值之后的分钟指示符。
S是秒数值后面的第二个指示符。
例如,“P3Y6M4DT12H30M5S”表示“三年六个月四天十二小时三十分五秒”的持续时间。
如果日期和时间元素的值为零,则可以省略包括其指示符的日期和时间元素,并且为了降低精度,也可以省略低阶元素。例如,“P23DT23H”和“P4Y”都是可接受的持续时间表示。但是,必须至少存在一个元素,因此“P”在0秒的持续时间内不是有效的表示然而,“PT0S”或“P0D”都是有效的,并且表示相同的持续时间。
为了解决歧义,“P1M”是一个月的持续时间,“PT1M”是一分钟的持续时间(注意时间值前面的时间指示符T)。使用的最小值也可以有小数,如“P0.5Y”表示半年。小数可以用逗号或句号指定,如“P0,5Y”或“P0.5Y”。本标准不禁止持续时间表示中的日期和时间值超过其“结转点”,除非下文另有说明。因此,“PT36H”和“P1DT12H”可用于表示相同的持续时间。但请记住,当切换到夏令时时,“PT36H”与“P1DT12H”不同。
或者,基于组合的日期和时间表示的持续时间格式可以通过通信双方之间的协议以基本格式PYYYYMMDDThhmmss或扩展格式P[YYYY]-[MM]-[DD]T[hh]:[MM]:[ss]使用。例如,上面显示的第一个持续时间是“P0003-06-04T12:30:05”。但是,单个日期和时间值不能超过其模数(例如,不允许月值为13或小时值为25)。[33]
尽管标准将持续时间描述为时间间隔的一部分,下一节将对此进行讨论,但是持续时间格式(或其子集)被广泛使用,独立于时间间隔,就像java8 duration类一样。[34][35]

三、如何使用:
1. 如下:
public static void main(String[] args) {
		
		try {
			DateFormat startTimeFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
			Date startTime = startTimeFormat.parse("2020-07-19T09:00:00");
			System.out.println("start time: "+startTime);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

运行结果为:

start time: Sun Jul 19 09:00:00 CST 2020
四、总结:如果有疑问可以直接留言评论,如果觉得对你有帮助,可以小小的赞赏一杯奶茶钱,谢谢!!

在这里插入图片描述

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,可以看出这是一个时间格式转换的问题。引用\[1\]提供了一个方法transToNormalDate,可以将格式为yyyy-MM-dd'T'HH:mm:ss.SSSXXX的时间字符串转换为yyyy-MM-dd HH:mm:ss的格式。引用\[2\]提供了一个方法将yyyy-MM-dd HH:mm:ss格式的时间字符串转换为yyyy-MM-dd'T'HH:mm:ss格式的方法。引用\[3\]提供了一个方法将yyyy-MM-dd HH:mm:ss格式的时间字符串转换为yyyy-MM-dd'T'HH:mm:ss.SSSXXX格式的方法。 所以,如果你想将yyyy-MM-dd'T'HH:mm:ss.0800格式的时间字符串转换为其他格式,你可以使用这些方法中的一个。具体的转换方法取决于你想要的目标格式。 #### 引用[.reference_title] - *1* *3* [时间格式yyyy-MM-dd‘T‘HH:mm:ss.SSSXXX与yyyy-MM-dd HH:mm:ss之间相互转换的工具类](https://blog.csdn.net/D_gloria/article/details/120806817)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Java 时间格式yyyy-MM-dd HH:mm:ss 转换为 yyyy-MM-dd‘T‘HH:mm:ss](https://blog.csdn.net/weixin_44181419/article/details/128562911)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值