Java 将gmt转换为ist不可解析日期异常
我想将格式为“Java 将gmt转换为ist不可解析日期异常,java,android,android-studio,Java,Android,Android Studio,我想将格式为“2020-03-16T18:50:39.656Z”的GMT时间转换为与GMT格式相同的IST时间,但我遇到了不可解析的异常在createdAt值末尾的Z是一个ISO 8601时区符号。要解析它,需要在日期格式字符串中包含X,而不是Z。将日期格式字符串更改为“yyyy-MM-dd'T'HH:MM:ss.SSSX”,程序将正常运行 或者,您可以在日期格式字符串中保留Z,但将输入作为“2020-03-16T18:50:39.656+0000”——也就是说,使用四位数字表示输入中的时间偏移
2020-03-16T18:50:39.656Z
”的GMT时间转换为与GMT格式相同的IST时间,但我遇到了不可解析的异常在createdAt
值末尾的Z
是一个ISO 8601时区符号。要解析它,需要在日期格式字符串中包含X
,而不是Z
。将日期格式字符串更改为“yyyy-MM-dd'T'HH:MM:ss.SSSX”
,程序将正常运行
或者,您可以在日期格式字符串中保留Z
,但将输入作为“2020-03-16T18:50:39.656+0000”
——也就是说,使用四位数字表示输入中的时间偏移,而不是Z
tl;博士
java.time
您正在使用可怕的日期时间类,这些类在几年前被采用JSR310的现代java.time类所取代
ISO 8601
您的输入字符串采用标准ISO 8601格式。末尾的Z
表示UTC(零小时分秒的偏移量),发音为“Zulu”
默认情况下,java.time类使用ISO8601格式。因此,无需指定格式化模式
Instant
将输入解析为一个瞬间
,表示UTC中的一个时刻
Instant
.parse(
"2020-03-16T18:50:39.656Z"
)
.atZone(
ZoneId.of( "Asia/Kolkata" )
)
ZoneDateTime
适应印度时间
String input = "2020-03-16T18:50:39.656Z" ;
Instant instant = Instant.parse( input ) ;
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,& 要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是 该项目现已启动,建议迁移到类 您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*
类
从哪里获得java.time类
- 、和更高版本-标准Java API的一部分,带有捆绑实现。
- Java9添加了一些次要功能和修复
- 及
- 大多数java.time功能都在中向后移植到Java6和Java7
-
- 更高版本的Android捆绑包实现了java.time类
- 对于早期的Android(请添加您试图转换的createdAt,
是一个常量:Z
否,yyy-MM-dd'HH:MM:ss.SSS'Z'
表示时区。不要在其周围放置Z
。如果最低Android级别为5,该使用什么。0@ashishvyas请参阅“关于java.time”第一节添加到答案的底部。'
String input = "2020-03-16T18:50:39.656Z" ; Instant instant = Instant.parse( input ) ;
ZoneId z = ZoneId.of( "Asia/Kolkata" ) ; ZonedDateTime zdt = instant.atZone( z ) ;