JAVA OffsetDateTime定制百分之一秒

时间:2017-03-28 14:29:20

标签: java datetime-format datetimeoffset

我目前正在寻找日期的自定义格式,但我无法获得它。

我想使用以下代码获取"1997-07-16T19:20:30.45+01:00"

OffsetDateTime o = OffsetDateTime.now();
String l = o.format(DateTimeFormatter.ISO_DATE_TIME);

结果是:

  

2017-03-28T16:23:57.489 + 02:00

非常接近,但我只需要hh:mm:ss.XX,而不是hh:mm:ss.XXX

您知道如何自定义OffsetDateTime吗?我找不到好的例子。

3 个答案:

答案 0 :(得分:1)

Your answer 几乎正确。如果你看一下DateTimeFormatter javadoc,你会发现小写s对应,大​​写S对应几分之一

Symbol  Meaning                     Presentation      Examples
------  -------                     ------------      -------
s       second-of-minute            number            55
S       fraction-of-second          fraction          978

因此,在您的模式中,sS被反转。正确的模式是:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSXXX");
OffsetDateTime o = OffsetDateTime.now();
System.out.println(o.format(formatter));

输出结果为:

  

2017-06-19T20:34:29.75-03:00

PS:请注意,秒的分数为75 - 大于59,这是的最大值(在您的回答,似乎正确,因为秒的分数是48,这给人的印象是它有效。

另一个细节是我的情况下的偏移是-03:00,因为我系统的默认时区。无论如何,只需修复你的模式,它应该工作。

答案 1 :(得分:0)

对于有同样问题的人。

似乎与模式:

String ISO_OFFSET_DATE_TIME_WITH_HUNDREDTH_OF_SECOND = "yyyy-MM-dd'T'HH:mm:SS.ssXXX";

DateTimeFormatter dateTimeFormatter =
        DateTimeFormatter.ofPattern(ISO_OFFSET_DATE_TIME_WITH_HUNDREDTH_OF_SECOND);


String ll = o.format(dateTimeFormatter);
System.out.println(ll);

我有所需的输出:

  

2017-03-28T16:44:48.30 + 02:00

答案 2 :(得分:0)

同样的问题。

我修复了。

DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");
String custom = dateTimeFormatter.format(OffsetDateTime.now());

您可以在此.ofPattern("--format--")

中创建所需的其他格式

引荐来源:https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html

为我工作。