問題タブ [java-calendar]

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 投票する
0 に答える
56 参照

java - Java Calendar を使用して異なる日に異なる時間を設定する方法は?

ショップの開店時間と閉店時間を設定するために、単純なアジェンダ クラスを作成しようとしています。日によって異なる時間を設定したいので、次のように 2 つのグレゴリオ暦を使用しています。

ここに私のアジェンダクラスがあります:

そのため、日曜日は同じ開店時間と閉店時間 (1:01) を印刷し、他の日は 8:00 / 19:30 と印刷することを期待していましたが、結果はすべての日でまったく同じ時間でした (「あなたのお店は08:00 に開始し、19:30 に終了します。」) 理由が本当にわかりません。誰かがこれを手伝ってくれませんか。

ありがとう

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

java - Java Calendar.toInstant() および Instant.atZone の不正確さ/ランダム性 (Local/ZonedDateTime.ofInstant() も)

純粋に新しい API を使用していた Calendar API を使用して、既存の API を使用しなければならないコードの一部を開発していました。変換で奇妙な動作が発生しました。次の例を参照してください。

私が得ている出力は次のとおりです。

したがって、グレゴリオ暦の最初の行はどちらの場合でも正しいです。

  • case1 の +01:00 ゾーンで 1 月 1 日午前 1:00 を取得します。
  • ケース 2 では、1 月 1 日の午前 0:00 を +01:00 ゾーンで取得します。

Calendarからに変換した後、Instant突然次のようになったため、日付に関する問題が既に発生しています。

  • ケース1の場合、12月30日(48時間前)に
  • ケース 2 の 12 月 29 日 (72 時間前) に ... また、変換中に導入された数百ミリ秒の小さなランダムな不正確さもあることがわかりました。

Instantnext からtoに変換するZonedDateTimeと、今

  • ヨーロッパ/パリに渡されたinstant.atZone()タイムゾーンが+00:09:21の奇妙なタイムゾーンになったため、9分21秒後

私はそれをさらにテストし、一般的に と の間の変換はCalendarInstant1583 年より前の日付では信頼性が非常に低くなり、Instant1911Local/ZonedDateTime年より前の日付ではタイムゾーンの問題により信頼性が低くなります。

1911 年より前の日付の時刻を保存/変換する人はほとんどいないことはわかっています (ただし、そのような使用例はまだ想像できます)。クリストファー・コロンブスが発見されたアメリカに出発した時期を見てみましょう!:

その結果、両方の API からエポック ミリ秒を取得すると、1911 年より前の早い時期に同じ ISO 日付に対して異なる結果が得られることもわかりました (問題はCalendarの実装にあるようです)。

「うまく機能する」ように変換する正しい方法は何ですか (tm) ?

注:これまでのところ、最も安全な方法は、最初に ISO 日付文字列に変換することだと思います。より良い解決策はありますか?