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

问题描述 投票:0回答:2

我有这个字符串,其中包含格式为“2023-04-20T00: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 而这不是我要找的

java json codenameone
2个回答
1
投票

根据输入格式将

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 纪元)以来经过的时间量,它们没有“格式”的内在概念,实际上是这些类的输出应该只考虑调试信息,这就是我们有格式化程序的原因。

现代方法

您应该避免使用

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

0
投票

tl;博士

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

字符串操作

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

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 类进行日期时间工作。永远不要使用有严重缺陷的遗留类,例如

Date
Calendar
SimpleDateFormat
.

要解析您的特定输入,请使用

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() ;
© www.soinside.com 2019 - 2024. All rights reserved.