我有一个字符串,它包含一个格式为“2023-04- 20 T00:00:00+02:00”的日期,我想把它转换回像这样的格式2023-04-20
我试过这个代码
String dateString=obj.get("eventDate").toString();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = dateFormat.parse(dateString.substring(0, 10));
t.setEventDate(date);
但它给了我这个输出Wed Apr 26 01:00:00 WAT 2023,它不是我在寻找的
2条答案
按热度按时间d6kp6zgx1#
根据输入格式将
String
转换为Date
对象...然后使用不同的格式化程序将
Date
化回所需的String
表示形式将输出
2023-04-20
请记住,日期/时间类是自某个锚点(即Unix Epoch)以来所经过的时间量的表示,它们没有“格式”的内在概念,实际上这些类的输出应该仅考虑调试信息,这就是为什么我们有格式化程序。
现代方法
您应该避免使用
java.util
日期/时间类,它们实际上已被弃用,而应该使用java.time
APIxam8gpfp2#
tl;dr
看这个code run at Ideone.com。
2023-04-20
字符串操作
显然,您可以简单地操作输入字符串。在前十个字母后截断。
或者,把绳子分成几部分。抓住第一块。
java.time
您可以将输入解析为日期-时间值。
只使用 java.time 类进行日期-时间工作。永远不要使用有严重缺陷的遗留类,如
Date
、Calendar
和SimpleDateFormat
。要解析特定的输入,请使用
java.time.OffsetDateTime
类。您的输入由三部分组成:日期、一天中的时间、以及从UTC的若干小时和分钟的偏移。到OffsetDateTime
类完全代表所有三个部分。相反,请注意,other Answer中的
LocalDateTime
类不能表示所有三个部分。这个类只表示三个部分中的前两个部分。因此,在那里使用那个类是误导和混乱的。解析之后,我们可以只提取日期部分,而不提取时间和偏移量。
以标准ISO 8601格式生成表示日期值文本。