私は、月、年の、日の属性があり、単純なDateクラスを持っていると思います。
私は、マガジンが公開されたときに私が知ることができるようにDateオブジェクトは、マガジンオブジェクトに含めることにしたいです。
日付D1 =新しい日付(1,1,1)の下に示すように私は、DateクラスからDateオブジェクトを使用しようとすると、新しい日付から日付が取り消し線、それは推奨されていることを示していました。私はそれに代わる新しいコンストラクタ読んそれは非常に混乱に見えます。私は、この使用してCalendarクラスを達成する方法を理解しません。それが可能であるならば、私は自分のDateクラスを作成したいいけない...私を助けてください。ありがとうございました
TL; DR
私は、マガジンが公開されたときに私が知ることができるようにDateオブジェクトは、マガジンオブジェクトに含めることにしたいです。
だから、型のメンバ変数を追加しますjava.time.LocalDate
。
package work.basil.example;
import java.time.LocalDate;
public class Magazine
{
// Member variables.
public LocalDate published ;
// Constructor.
public Magazine ( LocalDate published )
{
this.published = published;
}
}
それを使用するには:
Magazine m = new Magazine( LocalDate.of( 2019 , Month.JANUARY , 23 ) ) ;
LocalDate
- 現代的なアプローチが使用します
LocalDate
。 - 絶対に使用しないでください
java.util.Date
かjava.sql.Date
。
LocalDate
クラスは、時刻なしとせずに日付のみの値を表すタイムゾーンまたはをオフセットから-UTC。
タイムゾーンは、日付を決定する上で非常に重要です。任意の瞬間のために、日付がゾーンによって地球を周りに変わります。たとえば、真夜中後数分パリフランスはまだ「昨日」の間に、新しい日であるモントリオールケベック州。
タイムゾーンが指定されていない場合、JVMは、暗黙のうち、現在のデフォルトのタイムゾーンを適用します。そのデフォルトはあり、いつでも変更、実行時に(!)、あなたの結果は変わる場合もございます。ベターは、引数として明示的にあなたの希望/期待される時間帯を指定します。重要な場合は、ご利用者とのゾーンを確認します。
指定適切なタイムゾーン名をの形式でContinent/Region
、のようなAmerica/Montreal
、Africa/Casablanca
またはPacific/Auckland
。決してなど2-4文字の略称を使用していないEST
か、IST
そのままではない真の時間帯ではなく、標準化、さらには一意ではありません(!)。
ZoneId z = ZoneId.of( "America/Montreal" ) ;
LocalDate today = LocalDate.now( z ) ;
あなたはJVMの現在のデフォルトのタイムゾーンを使用したい場合は、それを求めると、引数として渡します。省略した場合、コードは、デフォルトまたはあなたは、非常に多くのプログラマのように、問題の知らなかった場合を使用することを意図している場合、我々は確かに知っていないということで読み取ることが曖昧になります。
ZoneId z = ZoneId.systemDefault() ; // Get JVM’s current default time zone.
または日付を指定します。あなたは、1〜12月のためのまともな番号1-12で、数で月に設定することができます。
LocalDate ld = LocalDate.of( 1986 , 2 , 23 ) ; // Years use sane direct numbering (1986 means year 1986). Months use sane numbering, 1-12 for January-December.
または、より良い、使いMonth
列挙オブジェクト事前定義された、年の各月の1を。ヒント:これらの使用Month
のオブジェクトコードベースではなく、単なる整数全体では、あなたのコードより自己文書を作る有効な値を確保し、提供するために、型の安全性を。同上用Year
&YearMonth
。
LocalDate ld = LocalDate.of( 1986 , Month.FEBRUARY , 23 ) ;
java.time
java.timeのフレームワークは、Java 8に組み込まれており、後にされています。これらのクラスは面倒古い取って代わるレガシーのような日付時刻クラスをjava.util.Date
、Calendar
、& SimpleDateFormat
。
より多くを学ぶために、参照Oracleのチュートリアルを。そして、多くの例および説明のためにスタックオーバーフローを検索します。仕様は、JSR 310。
The Joda-Time project, now in maintenance mode, advises migration to the java.time classes.
You may exchange java.time objects directly with your database. Use a JDBC driver compliant with JDBC 4.2 or later. No need for strings, no need for java.sql.*
classes.
Where to obtain the java.time classes?
- Java SE 8, Java SE 9, Java SE 10, Java SE 11, and later - Part of the standard Java API with a bundled implementation.
- Java 9 adds some minor features and fixes.
- Java SE 6 and Java SE 7
- ほとんどのjava.timeの機能がでJava 6&7にバックポートされThreeTen-バックポート。
- アンドロイド
- 実装バンドルのAndroidのそれ以降のバージョンjava.timeのクラス。
- 以前のアンドロイド(<26)の場合、ThreeTenABPのプロジェクトは、適応ThreeTen-バックポート(上記参照します)。参照してください... ThreeTenABPを使用する方法。
ThreeTen-エクストラプロジェクトでは、追加のクラスでjava.timeを拡張します。このプロジェクトは、java.timeに将来の追加のための試験場です。あなたはここにいくつかの有用なクラスのような見つけることがInterval
、YearWeek
、YearQuarter
、および多くを。