問題タブ [jsr310]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
172 参照

java - 新しいプロジェクトで java.util.Date を使用してはならないという Oracle の公式ドキュメントはありますか

会社でJava 8で新しいプロジェクトを書いています。Java 8 日時 API の使用を提案しましたが、同僚の 1 人が、新しい日時 API の動作が遅いと言っています。

本当ですか?java.util.Dateまた、新しいプロジェクトでは使用しないでくださいと記載されている公式ドキュメントを Oracle から取得したいと考えています。

0 投票する
1 に答える
6714 参照

java - Spring MongoTemplateを使用してJava 8 InstantをMongoDBにDate型として保存するには?

Instantメンバー変数の型を持つ Java クラスがあります。

MongoTemplate を使用しsomeInstantてデータベースのフィールドを更新しています。

メソッドを次のように呼び出している場合、これはうまく機能します。

updateSomeRecordBySomeId("SOME-ID", Instant.now());Dateフィールドをタイプ として DB に永続化します。"someInstant" : ISODate("2017-07-11T07:26:44.269Z")


現在、メソッドは次のように呼び出すこともできます。 updateSomeRecordBySomeId("SOME-ID", "2017-07-11T07:26:44.269Z");

この場合、次のような例外が発生します。

org.springframework.core.convert.ConverterNotFoundException: タイプ [java.lang.String] からタイプ [java.time.Instant] に変換できるコンバーターが見つかりませんでした

これは完全に理にかなっています。(あたかもDBのフィールドを更新しStringます。"someInstant" : "2017-07-11T07:26:44.269Z")


そこで、次のようにコンバーターを追加しました。

MongoConfig.java:

StringToInstantConverter.java:

上記のコンバーターを追加した後、私はもう取得していConverterNotFoundExceptionませんが、フィールドsomeInstantはプレーン文字列として永続化されています:"someInstant" : "2017-07-11T07:26:44.269Z"

それが私の質問です。コンバーターが識別されていることがわかっているため、例外が発生しなくなりました。しかし、コンバーターが を に変換しないのはなぜStringですかInstant? フィールドがプレーンとして永続化されているのはなぜStringですか? 付属のコンバーターが間違っていませんか?この場合のコンバーターの書き方は?

ノート:

  • 実際の問題に焦点を当てるためにコードを単純化しました。someInstant実際には、メソッドはフィールドをパラメーターとして受け取りません。したがって、オーバーロードされたメソッドを記述することは、ここでは適用できません。また、メソッド内のあらゆる種類のinstanceOfチェックは、実際のシナリオでは機能しません。では、なぜコンバージョンが起こらないのかという疑問に焦点が当てられています。

  • 実際のデータ ストアは DocumentDB ですが、データベース操作にはMongoDB API で DocumentDBを使用します(Spring Data は DocumentDB をサポートしていないため)。

0 投票する
1 に答える
904 参照

calendar - ThreeTen-Backport (JSR 310) を使用して ZonedDateTime を Calendar に変換する

java.timeクラス ( JSR 310 )のバックポートであるThreeTen-Backportプロジェクトを使用しZonedDateTimeて、オブジェクトをオブジェクトに変換しようとしています。Calendar

私の理解では、バックポートは Java 8 の機能に似ているはずでした (Java 8 自体にはありません)。現在、システムは Java 7 を使用しています。

次のコードを実行しようとするたびに:

次のメッセージが表示されます。

メソッド from(ZonedDateTime) はタイプ GregorianCalendar に対して未定義です

次の依存関係を使用しました。

どうすればこの問題を解決できますか?

ヘルプのヒントやアドバイスをいただければ幸いです。

ティア

0 投票する
1 に答える
1520 参照

java - Joda Time と Java8 の時差

2 つの日付の間の月を計算するソリューションを探しています。joda または java8 time でできると思います。しかし、それらを比較すると、非常に奇妙なことがわかりました。

出力は以下のとおりです。

テスト ケース 2 と非常に混同していますが、どちらが妥当ですか?

すみません、初めての質問です。完成したコードが添付されています。

0 投票する
1 に答える
942 参照

json - Spring Boot Jackson JSR-310 - ZonedDateTime は常にタイムスタンプ

Spring Boot を使用して開始されたこの Spring MVC コントローラーを検討してください。

Foo オブジェクトを Jackson JSR-310 モジュールでシリアライズしたいと考えています。この依存関係はクラスパスにあります:

application.properties に jackson の設定もあります。

ジャクソンのドキュメントによると、ISO日時形式に変換する必要がありますが、まだタイムスタンプ値を取得しています...

ZonedDateTimeSerializer 内で次のことに気付きました。

useTimestamp(provider)は に評価されるtrueため、application.properties のプロパティは無視されます。

私のコードで何が間違っている可能性がありますか?

0 投票する
1 に答える
132 参照

java - Java new time API のコンパイルと実行時の中断

Java 8 日時 API を一貫して使用しようとしています。この動作の背後にある説明を探しています。

問題なくコンパイルされますが、結果は次のようになります。

私の質問は、これらの型に互換性がない場合、なぜ API でそれをコード化して、悲鳴を上げることなくコンパイルできるのですか?

0 投票する
2 に答える
1389 参照

java - Java ZonedDateTime と英国夏時間

現在、日付が英国夏時間の内側と外側にある場合の ZonedDateTime の動作を見ています。

英国の夏時間は 3 月 25 日に始まり、1 時間 (+1) 追加されます。

ZonedDateTime (UTC およびヨーロッパ/ロンドン) のいくつかのインスタンスを作成し、次にそれらに 1 か月を追加して、それらが ZonedDateTime に分類されるようにしました。

これは、これらの日付を印刷した結果です。

最後に、各日付のエポック秒を出力しました。

ZonedDateTime が不変であることは知っています。これは、1 か月を追加すると、実際には変更された月で新しいインスタンスを作成することを意味します。与えられた観察に対する私の仮定が正しいかどうか教えてください。

  1. 1 か月追加すると、ZonedDateTime の新しいインスタンスが作成されます。ZonedDateTime の時間は常に同じです。新しい日付が BST かどうかは関係ありません。(LondonFirstMarch と LondonFirstMarchPlusMonth を見てください)

  2. 1 か月を追加した後、londonFirstMarchPlusMonth は BST に分類され、12:00 のままになるため、実際には 1 時間を抽出します。これは、基になるエポック秒が utcFirstMarchPlusMonth とは異なることを意味します。

  3. 最後に londonFirstMarchPlusMonthToUtc でゾーンを UTC に変換すると、実際の時間は 11:00 であることがわかりました。

  4. 正確に1か月後の日付が必要な場合。UTC のみを使用し、オプションで最後にロンドン/ヨーロッパに変換する必要がありますか?

編集:

おそらく私は十分に明確ではありませんでした - 申し訳ありません。1 か月は任意の値であるため、最初の日付に追加すると、BST に該当する 2 番目の日付が生成されます。

前述のように、1 か月は月によって意味が異なるため、おそらく良い例ではありません。私にとってのポイントは、「月」が 24 時間単位で構成されるということでした。(Ole.vvが言ったとおり)

UTC 時間で動作し、オプションでそれをヨーロッパ/ロンドンに変換することが、「私の質問」に対する解決策だと思います