我有这个字符串,其中包含格式为“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 而这不是我要找的
根据输入格式将
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);
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 类进行日期时间工作。永远不要使用有严重缺陷的遗留类,例如
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() ;