問題タブ [java.util.date]
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.
java - Date() オブジェクトの不一致。月、日、年がすべて間違っている
現在は 3/15/11 で、新しい日付オブジェクトを呼び出しているとき:
お返ししてます
- 月を 2 (
getMonth()
)、 - 日として2 (
getDay()
) - 年 (
getYear()
) は 111 です。
この慣習には理由がありますか?
java - 月フィールドの値 0 が無効です。util.date を XMLgregoriandate に変換するときは?
java.util.Date を XMLGregorianDate に変換しています。
コンソールに My util date を出力すると、次のように表示されます。
日付: 2011-01-25 20:33:46.54
しかし、変換後に使用しようとすると、次の例外が発生します: org.springframework.ws.soap.client.SoapFaultClientException: Invalid value 0 for Month field.
また興味深いのは、util Date.getYear() および getMonth() メソッド (コンソールに日付を表示するためだけに使用される非推奨のメソッド) を表示すると、コンソールの出力が次のようになることです。
年: 111 月: 0
なぜこれが起こっているのですか?誰かがこの背後にある理由を教えてもらえますか? 前もって感謝します。
java - java.util.Dateを文字列に変換する
java.util.Date
オブジェクトをString
Javaでに変換したい。
フォーマットは2010-05-30 22:15:52
java - java.util.Dateをorg.joda.time.LocalDateTimeに変換する際の問題
この日付または次の日付で、それはすべてOKです:
new LocalDateTime(new Date(0,0,1,2,30))
— 1900-01-01T02:30:00.000new LocalDateTime(new Date(111,4,24,19,51))
— 2011-05-24T19:51:00.000
しかし、以前の日付では理解できないことがあります。
new LocalDateTime(new Date(0,0,1,2,29,50))
— 1900-01-01T01:59:50.000new LocalDateTime(new Date(0,0,1))
— 1899-12-31T23:30:00.000new LocalDateTime(new Date(-50,0,1))
— 1849-12-31T23:30:20.000new LocalDateTime(new Date(-116,6,4))
— 1784-07-03T23:30:20.000
誰が知っていますか、これは何ですか、そしてこの問題を防ぐ方法は?
java - APIでjava.util.Dateを使用する正当な理由
longまたはLongではなく、API(たとえば、従業員の誕生日フィールド)でDateクラスを使用する特定の理由はありますか?
これについては、 java-date-vs-calendarでいくつか説明されていますが、長い(または長い)方がはるかに単純に見える場合に、日付を使用する理由があるかどうかを具体的に知りたいと思います。
もちろん、TimeZoneとSimpleDateFormatterを使用してGUIで日付を解析および表示し、Calendarを使用して操作を実行しますが、この質問では、データモデル/APIでの日付の保存と表現のみに関心があります。
更新:日付を選択しない理由の1つの例は、変更可能であるということです。したがって、APIでDateを公開すると、呼び出し元はsetTime(long)を呼び出すことができ、これは基本的なカプセル化に違反しているようです。長いプロパティtimeInMillisecondsSinceEpochを呼び出して同じ情報を呼び出し元に伝達できるため、これは、日付を使用することで得られる明確さの利点を上回っているように見えます。
java - java.util.Date の動作
上記のプリント:
どうしてこれなの?これは Date のバグですか? それは信じがたいです。
java - jodajava.util.Calendarまたはjsr310の代わりにdate4jを使用すべきではないのはなぜですか?
私は最近、Javaで日付を操作するための非常に単純なライブラリ(基本的には単一のクラス)であるdate4jに出くわしました。概念的には、date4jの「アイデア」が本当に好きです。実際、メインサイト全体とjavadocのドキュメントの両方を読んだ後、私は述べられているすべてにほぼ同意します。
さて、date4jを使用すべきでない理由はいくつかあるかもしれません-バグ、パフォーマンス、ユーザーの不足などです。私はそれらのことについて質問していません。概念的には、date4j(そこにあるほとんどのアプリケーション)のアイデアの何が問題になっていますか?確かに、jodaやthreetenのようなものを必要とするアプリケーションがあるかもしれませんが、それらは少数派であると私は信じています。
日付/時刻を扱うユーザー(ほとんどすべての人がJavaアプリを作成している)に人々が与える通常のアドバイスは、次のようなものです。
- java.util.Calendarの代わりにjoda-timeを使用する
- WebサーバーをUTCに設定します
- データベースサーバーをUTCに設定します
- 日時をUTCで保存します
実際、最後の3つの箇条書きは、日付を操作するときに人々が抱える現在のメンタルモデルの問題を示しています。人々は、アプリケーションレベルとデータベースレベルの両方でタイムゾーンを管理しようとします(ORMフレームワークは、物事をさらに複雑にする別の抽象化レイヤーを追加することは言うまでもありません)。
あなたはそれらのことをする必要はないはずです。たとえば、java.util.Calendarを使用していて、ユーザー定義のタイムゾーンで時間を操作している場合は、次のようになります。
これは、タイムゾーンに関係なく、時間の「インスタント」を表します。今回は、データベースとの間で「変換」が発生することを心配せずに永続化できるはずです。データベースが上海のタイムゾーンにあり、Webサーバーがロサンゼルスのタイムゾーンにあるかどうかは関係ありません。時間の瞬間は関係なく同じです。
1つの問題は、一部のデータベースがタイムゾーンを管理しようとし(私はあなたを見ています、Postgres!grr!)、さらに悪いことに、JDBCドライバーレベルでの動作はベンダー固有です(つまり、PreparedStatement.setDate / getDate)。
date4jが使用するメンタルモデルは、すべての混乱を取り除くようです。たとえば、now()を呼び出すときに、明示的に使用を強制してタイムゾーンを提供します。このサイトには、ライブラリを使用するための非常に優れた推奨事項がいくつかあります(これらは、以前に自分のアプリですでに行っていたものです)。
- タイムゾーンを管理しようとするデータベースタイプを使用しないでください
- タイムゾーンを別の列として保存する(必要な場合)
date4jのようなライブラリを採用する人が増えないのはなぜですか?
java - java.util.Calendarに関する質問
次のコードで動作を理解しようとしています。私のローカルタイムゾーンはUTC-7(アリゾナ)です。
次の出力を生成します。
1 UTC -4時間:12
1 UTC -4日:27
1 UTC -7タイムスタンプ:火9月27日12:40:37 MST 2011
2 UTC -4時間:0
2 UTC -4日:28 2UTC-
7時間スタンプ:Wed Sep 28 00:40:37 MST 2011
3 UTC -4 Hour:3
3 UTC -4 Day:28
3 UTC -7 Time Stamp:Wed Sep 28 00:40:37 MST 2011
4 UTC -4 Hour:12
4 UTC -4日:28
4 UTC -7タイムスタンプ:水9月28日09:40:37 MST 2011
私が理解していないのは、最初のcal.set(Calendar.HOUR、12)によって日付が翌日に反転する理由です。1つの値にadd()を使用すると、他の値が調整されることは理にかなっていますが、set()がそれを行うことも意味がありません。
他のすべての値が保持される絶対set()を実行する方法はありますか?
java - Java クラスの static final Date フィールド
文字列を解析して Date オブジェクトを返す public static util メソッドがありますが、解析された文字列を Date オブジェクトに変換できない場合は ParseException もスローします。
ここで、別のクラスで、上記の util メソッドを使用して値に初期化された static final Date を使用したいと考えています。しかし、util メソッドが ParseException をスローすると、これは許可されません。
これは私がやりたいことであり、これは許可されていません
この日付フィールドを「最終」に保つための推奨される方法は何ですか?