Java時刻がタイムスタンプのような単純なものを処理する方法は、私には少しばかり迷っています。多分私はそれを間違っている。Java時刻の書式の不一致
ISO 8601のタイムスタンプ文字列を生成します。明白な方法はInstance.now()
を作成し、フォーマットするにはDateTimeFormatter.ISO_INSTANT
を使用してフォーマットします。ただし、Instance
にはformat()
というメソッドがないので、「インスタンス」フォーマッタでフォーマットすることはできません。想像してみろ。
したがって、インスタンスからZonedDateTime
を作成する必要があります。今
Instant.now().atZone(ZoneOffset.UTC).format(DateTimeFormatter.ISO_INSTANT)
が、私は戻って、文字列を取得し、明らかに私はそれを取り戻すしたい:それはDateTimeFormatter.ISO_INSTANT
はとにかくそれを置くために何が起こっているかですので、私が選ぶ、私はUTCを選択したゾーンは問題ないはずZonedDateTime
インスタンス、それは私がそれをフォーマットするために使用したものですから!だから私は試してみてください:
ZonedDateTime.parse(timestamp, DateTimeFormatter.ISO_INSTANT)
タイムゾーンの情報がないことを私に訴えます。しかし、私はそれを生成するためにZonedDateTime
を使用しました---それは私がそれをフォーマットするためにInstance
を使用させないという私のせいではありません。
は奇妙Instance
format()
方法を持っていないが、それは、再び奇妙、DateTimeFormatter.ISO_INSTANT
を用いて解析されparse()
方法を持っている(たとえIできない形式そのフォーマッタを使用Instance
)。
コメントで指摘したように、私はDateTimeFormatter.ISO_INSTANT.format(Instance.now())
を使用してインスタンスを直接フォーマットすることができます。なぜ、Instance.format(…)
が存在しないのですか?
タイムスタンプを生成して解析するだけで、複雑で矛盾しているようです。それとも間違っているのですか?
あなたは 'DateTimeFormatter.ISO_INSTANT.format(...)に' 'Instant'を渡すことができ、あなたのすることはできません:往復は、単に
parse()
を使用し、このバックを解析するために? – lexicore
ああ、確かに私はできる!私は 'DateTimeFormatter.format(...)'メソッド全体を見逃していました。それでも、 'Instant'は' DateTimeFormatter.format(...) 'で動作するなら' format(...) 'メソッドを持たないのは奇妙です。そして、もう一つの問題はより大きな矛盾になります。私は 'Instance'をフォーマットするために' DateTimeFormatter.ISO_INSTANCE'を使うことができますが、それを解析することはできません! –