时间格式字符串



我正在尝试解码从我的api接收的日期-时间在我需要的格式"yyyy-MM-dd">

我以2格式接收时间

1. "2022-05-05T11:32:12.542Z"
2. "2022-05-06T07:33:46.59928+00:00"

我能够通过使用以下模式解析它来解码第一种格式

"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"

但是无法理解第二个条件的格式。

第二个条件的更多例子

"2022-05-06T06:30:25.583988+00:00"
"2022-05-05T11:32:49.393283+00:00"

注:我不需要解析逻辑,只需要模式

代码中用于解析第一个条件

的完整方法
fun convertToFormat(src: String): String {

val originalFormat =
SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.getDefault())
val targetFormat = SimpleDateFormat("yyyy-MM-dd")
val date = originalFormat.parse(src)
return targetFormat.format(date)
}

br

如果您只想提取输入字符串的日期部分,请分割。

"2022-05-05T11:32:12.542Z"
.split( "T" ) 
[ 0 ] 

如果要解析输入字符串,请使用OffsetDateTime&LocalDate.

OffsetDateTime
.parse(
input 
) 
.toLocalDate()
.toString() ;

避免遗留类

你正在使用糟糕的日期时间类,这些类在几年前就被现代的java取代了。JSR 310定义的time类。禁止使用SimpleDateFormat,Date,Calendar

<标题>ISO 8601 h1> 的两个示例字符串都表示与UTC相差0小时-分钟-秒的时刻。

你的两个示例字符串都是标准的ISO 8601格式。java。time类在解析/生成文本时默认支持ISO 8601格式。因此不需要指定格式模式。

Instant

将输入解析为类Instant的对象。

Instant instant1 = Instant.parse( "2022-05-05T11:32:12.542Z" ) ;
Instant instant2 = Instant.parse( "2022-05-06T07:33:46.59928+00:00" ) ;

查看此代码运行在IdeOne.com。

LocalDate

你只需要日期。因此,转换为更灵活的OffsetDateTime,并提取LocalDate

LocalDate ld = Instant.atOffset( ZoneOffset.UTC ).toLocalDate() ; 

然后调用LocalDate#toString生成ISO 8601格式的文本YYYY-MM-DD。

<标题>Android h1>java。time类是内置在Java 8及以后版本中的。 Android 26+带有java.time的实现。对于早期的Android,最新的工具通过"API去糖"提供了大部分功能。

我正在寻找SimpleDateFormat文档,并找到了这个参考:https://developer.android.com/reference/kotlin/java/text/SimpleDateFormat#examples

模式"yyyy-MM-dd'T'HH:mm:ss.SSSXXX" 2001-07-04T12:08:56.235-07:00,看起来与你收到的非常相似(除了秒精度)。

相关内容

  • 没有找到相关文章

最新更新