如何获取此日期格式“2022-06-18_21:31:17.568-07:00”

时间:2017-10-10 06:21:31

标签: java spring datetime simpledateformat

为了在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

2 个答案:

答案 0 :(得分:2)

使用此yyyy-MM-dd'_'HH:mm:ss.SSSXXX之类的格式代替yyyy-MM-dd'_'HH:mm:ss.SSSX

答案 1 :(得分:1)

TL;博士

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" , "_" )

ISO 8601

您所需的格式几乎符合java.time类使用的标准ISO 8601格式。用您想要的下划线替换标准格式中间的T

我强烈建议坚持使用标准,留下T,而不是发明自己的格式。

java.time

现代方法使用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