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