json 你能帮我把这个包含日期的字符串转换成日期类型的变量并格式化它吗?

idfiyjo8  于 2023-05-08  发布在  其他
关注(0)|答案(2)|浏览(124)

我有一个字符串,它包含一个格式为“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,它不是我在寻找的

d6kp6zgx

d6kp6zgx1#

根据输入格式将String转换为Date对象...

String dateString = "2023-04-20T00:00:00+02:00";
SimpleDateFormat inFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
Date date = inFormat.parse(dateString);

然后使用不同的格式化程序将Date化回所需的String表示形式

SimpleDateFormat outFormat = new SimpleDateFormat("yyyy-MM-dd");
String outString = outFormat.format(date);
System.out.println(outString);

将输出2023-04-20
请记住,日期/时间类是自某个锚点(即Unix Epoch)以来所经过的时间量的表示,它们没有“格式”的内在概念,实际上这些类的输出应该仅考虑调试信息,这就是为什么我们有格式化程序。

现代方法

您应该避免使用java.util日期/时间类,它们实际上已被弃用,而应该使用java.time API

String dateString = "2023-04-20T00:00:00+02:00";
LocalDateTime ldt = LocalDateTime.parse(dateString, DateTimeFormatter.ISO_OFFSET_DATE_TIME);
String outString = ldt.format(DateTimeFormatter.ISO_DATE);
System.out.println(outString);
xam8gpfp

xam8gpfp2#

tl;dr

OffsetDateTime
.parse( "2023-04-20T00:00:00+02:00" )
.toLocalDate()
.toString()

看这个code run at Ideone.com
2023-04-20

字符串操作

显然,您可以简单地操作输入字符串。在前十个字母后截断。

String result = "2023-04-20T00:00:00+02:00".substring( 0 , 10 ) ;

或者,把绳子分成几部分。抓住第一块。

String result = "2023-04-20T00:00:00+02:00".split( "T" )[ 0 ] ;

java.time

您可以将输入解析为日期-时间值。
只使用 java.time 类进行日期-时间工作。永远不要使用有严重缺陷的遗留类,如DateCalendarSimpleDateFormat
要解析特定的输入,请使用java.time.OffsetDateTime类。您的输入由三部分组成:日期、一天中的时间、以及从UTC的若干小时和分钟的偏移。到OffsetDateTime类完全代表所有三个部分

OffsetDateTime odt = OffsetDateTime.parse( "2023-04-20T00:00:00+02:00" ) ;

相反,请注意,other Answer中的LocalDateTime类不能表示所有三个部分。这个类只表示三个部分中的前两个部分。因此,在那里使用那个类是误导和混乱的。
解析之后,我们可以只提取日期部分,而不提取时间和偏移量。

LocalDate ld = odt.toLocalDate() ;

以标准ISO 8601格式生成表示日期值文本。

String result = ld.toString() ;

相关问题