2017-10-10 487 views
-4

什么是我需要,以获得日期,这样"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

+4

因为没有证据我已经downvoted这个问题任何研究。请[编辑]你的问题,包括你已经完成的研究和*精确*你有困难的地方。如果你能做到这一点,我可以收回我的downvote。 –

+0

在日期格式字符串中使用'XXX'而不是'X'来获取格式为'-07:00'而不是'-07'。 – Jesper

回答

2

使用格式喜欢这个yyyy-MM-dd'_'HH:mm:ss.SSSXXX代替yyyy-MM-dd'_'HH:mm:ss.SSSX

+0

这适用于我 – Nithyananth

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 [美国/洛杉矶]

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

相关问题