JAVA OffsetDateTime自定义百分之一秒

JAVA OffsetDateTime自定义百分之一秒,java,datetime-format,datetimeoffset,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-28816:23:57.489+02:00 非常接近,但我只需要hh:mm:ss.XX,而不是hh:mm:ss.XXX 您知道如何定制OffsetD

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

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

OffsetDateTime o = OffsetDateTime.now();
String l = o.format(DateTimeFormatter.ISO_DATE_TIME);
结果是:

2017-03-28816:23:57.489+02:00

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


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

适用于有同样问题的人

似乎在这种模式下:

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-28816:44:48.30+02:00

几乎是正确的。如果你看一下,你会发现小写的
s
对应于秒,而大写的
s
对应于秒的分数:

Symbol  Meaning                     Presentation      Examples
------  -------                     ------------      -------
s       second-of-minute            number            55
S       fraction-of-second          fraction          978
因此,在您的模式中,
s
s
是反向的。正确的模式是:

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
。不管怎样,只要修复您的模式,它就会工作。

同样的问题

我修好了

DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");
String custom = dateTimeFormatter.format(OffsetDateTime.now());
您可以在此
模式(“--format--”)中创建所需的其他格式

参考:


为我工作。

我认为你的代码没有问题,毫秒会随着时间的推移而变化,有时你会得到XXX,但如果你再次编译代码,你会得到XX。这是我的2017-03-28819:36:00.45+05:00。正如另一个答案中提到的
HH:mm:SS.SS
应该是
HH:mm:SS.SS