ジャバ:GregorianCalendar の最大値と最小値は何ですか?
-
25-09-2019 - |
質問
GregorianCalendar の最大値と最小値は何ですか?
それらは Integer.MAX_VALUE のような定数内にあるのでしょうか、それとも GregorianCalendar.get(BLAH) なのでしょうか?
一言で言えば、最小値/最大値を指定して GregorianCalendar インスタンスを作成するにはどうすればよいでしょうか?
解決
これは動作するはずます:
GregorianCalendar maxgc = new GregorianCalendar();
maxgc.setTime(new Date(Long.MAX_VALUE));
GregorianCalendar mingc = new GregorianCalendar();
mingc.setTime(new Date(Long.MIN_VALUE));
他のヒント
私はjoekutnerの提案を取り、でそれを実行しました。
GregorianCalendar gCal = new GregorianCalendar( );
gCal.setTime(new Date(Long.MIN_VALUE));
System.out.println( "Min Date is " + gCal.getTime() + " " + gCal.get(Calendar.ERA));
gCal.set( Calendar.SECOND, 3 );
System.out.println( "Min Date less 1 second is " + gCal.getTime() + " " + gCal.get(Calendar.ERA));
gCal.setTime(new Date(Long.MAX_VALUE));
System.out.println( "Max Date is " + gCal.getTime() + " " + gCal.get(Calendar.ERA));
Min Date is Sun Dec 02 16:47:04 GMT 292269055 0
Min Date less 1 second is Sun Aug 17 07:12:54 GMT 292278994 1
Max Date is Sun Aug 17 07:12:55 GMT 292278994 1
ショー最小値と最大値、およびそれらの間あなたが最小前に、第2に移動しようとすると何が起こるかを示す- 。あなたがラップアラウンド
このバージョン1.6.0_17だっます。
電話してみることもできます Calendar.getMinimum() フィールドのタイプごとに (すなわち、年、月など)、対応するフィールド タイプにそれらの最小値を設定します。これにより、最小限のカレンダーが得られます。それをより速く行う方法があるかどうかはわかりません。
他の回答は正しいかもしれませんが、時代遅れのクラスを使用しています。
java.time
古い日時クラス (java.util.Date/.Calendar など) は、 java.time Java 8 以降に組み込まれているフレームワーク。
java.time クラスは以下からインスピレーションを得ています。 ジョーダタイム, 、 によって定義されます JSR 310, ThreeTen-Extra プロジェクトによって拡張され、Java 6 および 7 にバックポートされました。 ThreeTen バックポート プロジェクトを開発し、Android に適合させました。 スリーテンABP プロジェクト。見る チュートリアル.
タイムライン上の一瞬 UTC の解像度で ナノ秒, 、 使用 Instant
. 。与えられた UTC からのオフセット, 、 使用 OffsetDateTime
. 。のために タイムゾーン (オフセット + 異常のルール)、使用します ZonedDateTime
, ただし、その性質上、最小/最大が定義されておらず、 ZoneId
. 。時刻やタイムゾーンを含まない日付のみの値の場合は、次を使用します。 LocalDate
. 。日付やタイムゾーンを含まない時刻のみの値の場合は、次を使用します。 LocalTime
. 。タイムゾーンのない日時の場合は、次を使用します。 LocalDateTime
.
以下はすべて事前定義された定数です。
Instant.MIN
=-1000000000-01-01T00:00Z
Instant.MAX
=1000000000-12-31T23:59:59.999999999Z
OffsetDateTime.MIN
=-999999999-01-01T00:00:00+18:00
OffsetDateTime.MAX
=+999999999-12-31T23:59:59.999999999-18:00
LocalDate.MIN
=-999999999-01-01
LocalDate.MAX
=+999999999-12-31
LocalTime.MIN
=00:00
LocalTime.MAX
=23:59:59.999999999
LocalDateTime.MIN
=-999999999-01-01T00:00:00
LocalDateTime.MAX
=+999999999-12-31T23:59:59.999999999
Year.MIN_VALUE
=-999,999,999
Year.MAX_VALUE
=+999,999,999
ZoneOffset.MIN
=-18:00
(しかし-12:00
実際には)ZoneOffset.MAX
=+18:00
(しかし+14:00
実際には)
注意: これらの値をある種のフラグまたは特別な意味として使用する場合は注意してください。他の多くのソフトウェア ライブラリやデータベースは、これらの極端な値をサポートしていない可能性があります。
フラグや、null 以外の「利用可能な値がありません」などの特別な意味については、任意の瞬間を選択することをお勧めしますが、時間の前後に極端に到達することは避けてください。おそらく、 Unix エポック基準日, 、UTC での 1970 年の最初の瞬間、1970-01-01T00:00:00Z。Java では定数として定義されます。 インスタント.エポック
について java.time
の java.time フレームワークは Java 8 以降に組み込まれています。これらのクラスは、面倒な古いクラスに取って代わります。 遺産 日時クラスなど java.util.Date
, Calendar
, & SimpleDateFormat
.
の ジョーダタイム プロジェクト、現在進行中 メンテナンスモード, への移行をアドバイスします。 java.time クラス。
詳細については、を参照してください。 オラクルのチュートリアル. 。また、Stack Overflow で検索すると、多くの例や説明が得られます。仕様は JSR 310.
交換していただけます java.time オブジェクトをデータベースに直接接続します。使う JDBCドライバー に準拠 JDBC 4.2 またはそれ以降。文字列も必要もありません java.sql.*
クラス。
java.time クラスはどこで入手できますか?
- Java SE8, Java SE9, Java SE10, 、 以降
- 内蔵。
- 実装がバンドルされている標準 Java API の一部。
- Java 9 では、いくつかのマイナーな機能と修正が追加されています。
- Java SE6 そして Java SE 7
- java.time 機能の多くは、Java 6 および 7 にバックポートされています。 ThreeTen バックポート.
- アンドロイド
- Android の新しいバージョンには、 java.time クラス。
- 以前の Android (<26) の場合、 スリーテンABP プロジェクトが適応する ThreeTen バックポート (上記の通り)。見る ThreeTenABPの使い方….
の ThreeTen-Extra プロジェクトは追加のクラスで java.time を拡張します。このプロジェクトは、将来 java.time に追加される可能性があるための実験場です。ここで次のような便利なクラスを見つけることができます。 Interval
, YearWeek
, YearQuarter
, 、 そして もっと.