Javaで日付を表現する方法

nanakondor :

私は、月、年の、日の属性があり、単純な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.Datejava.sql.Date

LocalDateクラスは、時刻なしとせずに日付のみの値を表すタイムゾーンまたはをオフセットから-UTC

タイムゾーンは、日付を決定する上で非常に重要です。任意の瞬間のために、日付がゾーンによって地球を周りに変わります。たとえば、真夜中後数分パリフランスはまだ「昨日」の間に、新しい日であるモントリオールケベック州

タイムゾーンが指定されていない場合、JVMは、暗黙のうち、現在のデフォルトのタイムゾーンを適用します。そのデフォルトはあり、いつでも変更、実行時に(!)、あなたの結果は変わる場合もございます。ベターは、引数として明示的にあなたの希望/期待される時間帯を指定します。重要な場合は、ご利用者とのゾーンを確認します。

指定適切なタイムゾーン名をの形式でContinent/Region、のようなAmerica/MontrealAfrica/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のオブジェクトコードベースではなく、単なる整数全体では、あなたのコードより自己文書を作る有効な値を確保し、提供するために、型の安全性を同上用YearYearMonth

LocalDate ld = LocalDate.of( 1986 , Month.FEBRUARY , 23 ) ;

Javaの日付時刻型の、近代的遺産の両方の表。


java.time

java.timeのフレームワークは、Java 8に組み込まれており、後にされています。これらのクラスは面倒古い取って代わるレガシーのような日付時刻クラスをjava.util.DateCalendar、& 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?

ThreeTen-エクストラプロジェクトでは、追加のクラスでjava.timeを拡張します。このプロジェクトは、java.timeに将来の追加のための試験場です。あなたはここにいくつかの有用なクラスのような見つけることがIntervalYearWeekYearQuarter、および多くを

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=239691&siteId=1