为了在JAVA中获取日期"2022-06-18_21:31:17.568-07:00"
,我需要做什么格式
yyyy-MM-dd'_'HH:mm:ss.SSSX
这是我想要使用的,但在此结果中
2017-10-10_11:43:56.336+05
我真正需要的是2022-06-18_21:31:17.568-07:00
答案 0 :(得分:2)
使用此yyyy-MM-dd'_'HH:mm:ss.SSSXXX
之类的格式代替yyyy-MM-dd'_'HH:mm:ss.SSSX
答案 1 :(得分:1)
ZonedDateTime.of(
LocalDate.of( 2022 , 6 , 18 ) ,
LocalTime.of( 21 , 31 , 17 , 568_000_000 ) ,
ZoneId.of( "America/Los_Angeles" )
)
.format( DateTimeFormatter.ISO_OFFSET_DATE_TIME )
.replace( "T" , "_" )
您所需的格式几乎符合java.time类使用的标准ISO 8601格式。用您想要的下划线替换标准格式中间的T
。
我强烈建议坚持使用标准,留下T
,而不是发明自己的格式。
现代方法使用java.time类。
避免使用SimpleDateFormat
,因为它是麻烦的旧日期时间类的一部分。现在取代了java.time。特别是ZonedDateTime
类。
ZoneId z = ZoneId.of( "America/Los_Angeles" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;
String output = zdt.toString() ;
默认情况下,java.time类中的toString
方法使用标准ISO 8601格式。在ZonedDateTime
的情况下,除了从UTC的偏移量之外,明智地扩展该格式以将时区的名称附加在方括号中。
zdt.toString():2017-07-23T01:23:45.678-07:00 [America / Los_Angeles]
DateTimeFormatter
如果您坚持,可以删除附属物,但它确实提供了有价值的信息。
或者您可以使用备用DateTimeFormatter
对象生成字符串,其中一个内置为常量:DateTimeFormatter.ISO_OFFSET_DATE_TIME
DateTimeFormatter f = DateTimeFormatter.ISO_OFFSET_DATE_TIME ;
String output = z.format( f ) ;
如果你坚持,你可以用你的下划线代替。
String modified = output.replace( "T" , "_" ) ;
2017-07-23_01:23:45.678-07:00