如何获得此日期格式“2022-06-18_21:31:17.568-07:00”
问题描述:
什么是我需要,以获得日期,这样"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类所使用的标准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 [美国/洛杉矶]
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
因为没有证据我已经downvoted这个问题任何研究。请[编辑]你的问题,包括你已经完成的研究和*精确*你有困难的地方。如果你能做到这一点,我可以收回我的downvote。 –
在日期格式字符串中使用'XXX'而不是'X'来获取格式为'-07:00'而不是'-07'。 – Jesper