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

How to get this date format "2022-06-18_21:31:17.568-07:00"

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

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 classes 使用的标准 ISO 8601 格式。将标准格式中间的 T 替换为您想要的下划线。

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

java.time

现代方法使用 java.time classes。

避免使用 SimpleDateFormat,因为它是麻烦的旧日期时间 classes 的一部分。现在被 java.time 取代。特别是这里的 ZonedDateTime class.

ZoneId z = ZoneId.of( "America/Los_Angeles" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;
String output = zdt.toString() ;

java.timeclass中的toString方法默认使用标准的ISO 8601格式。在 ZonedDateTime 的情况下,除了与 UTC 的偏移量之外,该格式被明智地扩展为在方括号中附加时区名称。

zdt.toString(): 2017-07-23T01:23:45.678-07:00[America/Los_Angeles]

DateTimeFormatter

如果您坚持,您可以删除附件,尽管它确实提供了有价值的信息。

或者您可以使用替代方法生成字符串 DateTimeFormatter object, one built-in as a constant: 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

使用这样的格式 yyyy-MM-dd'_'HH:mm:ss.SSSXXX 而不是 yyyy-MM-dd'_'HH:mm:ss.SSSX