操作[Java]日付と時刻


日付と時刻を処理するクラス

  • java.util.Date
  • java.util.Calendar
  • java.text.SimpleDateFormat
  • 操作の現在の日付

    Date now = new Date();
    Dateクラスを使用してインスタンスを作成すると、オブジェクトの作成時の日付と時刻がインスタンスに保存されます.

    日付データ変更時

    Calendar cal = Calendar.getInstance();
    cal.add(Calendar.DAY_OF_MONTH, 1);
    
    Date nextMonth = cal.getTime();
    Calendarでは、プログラマがランダムにインスタンスを作成することはできません.したがって、getInstance()メソッドを使用してオブジェクトを作成できます.
  • 任意のインスタンスを作成できないのは、設計モードの1つであるモノトーンモードである.これはよく使われるデザインです.
  • Calendarはaddメソッドを使用してデータ値を変更します.1番目のパラメータは、Calendarクラスの定数を2番目のパラメータに変更する数を指定します.
  • 2番目の引数は、負の値であってもよい.
  • Calendarクラスの主な定数

  • YEAR:年
  • MONTH:月
  • DATE:日
  • DAY OF MONTH:天(DATEと同じ)
  • HOUR OF DAY:24時間制
  • HOUR:12時間制時間
  • MINUTE:分
  • SECOND:秒
  • MILLISECOND:ミリ秒
  • 指定日に設定した場合

    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.DAY_OF_MONTH, 1);
    
    Date specificTime = cal.getTime();
    setメソッドの最初の引数に対応する値が変更され、残りは現在の時間に参照されます.
  • setは、特定の値に変更されるため、負の値を許可しません.
  • 日付から特定のアイテムを抽出する場合。

    Date specificTime = cal.getTime();
    int month = cal.get(Calendar.MONTH);
    日付から月を取得するときに使用する方法.ただし、get()は月をインポートすると-1がインポートされるため、月を使用する場合は1を追加して返す必要があります.
  • 残りのデータはすべて1から返されます.
  • 出力日データをフォーマットする場合

    Date specificTime = cal.getTime():
    
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
    
    String formatedStr = sdf.format(specficTime);
    SimpleDataFormatクラスの作成者に文字列フォーマットを追加し、Dateクラスをformateメソッドの引数として使用することで、文字列を対応するフォーマットに変更できます.

    単純なデータ形式

  • yyyyy:年度
  • yy:年度
  • MM:月
  • dd:日
  • HH:都市
  • mm:分
  • ss:秒
  • SSS:ミリ秒
  • 日付データの比較時


    日付データの比較には、CalendarクラスのcompareTomメソッドを使用します.
    Calendar cal1 = Calendar.getInstance();
    Calendar cal2 = Calendar.getInstance();
    
    cal1.set(Calendar.DAY_OF_MONTH, 1);
    cal2.set(Calendar.DAY_OF_MONTH, 2);
    
    int result = cal1.compareTom(cal2);
    以上のコードの結果は、比較値が-1未満の場合に-1を返します.同じ場合は0、大きい場合は1を返します.

    compareToに似た方法

  • aft:比較するインスタンスが将来であるかどうかを比較します.
  • before:比較するインスタンスが過去であるかどうかを比較します.
  • eFauls:比較するインスタンスが比較するインスタンスと同じかどうかを決定します.
  • compareTo:比較するインスタンスが比較するインスタンスの未来1よりも大きい場合、過去-1の場合は0を返します.
  • Date-Time API


    Java 8に日時APIが追加されました.Date-time APIは,以前のJavaで処理されていた日付クラスの不足を補う.

    時差アプリケーションでは、日時APIが便利です.時差だけでなく、夏時間制など、時間に関するルールも処理できます.
  • もちろん、CalendarクラスやDateクラスでも時差を扱うことができますが、時差をより楽に、より細かく扱うことができます.
  • 以下に、Date-time APIの適切なクラスを選択する方法を示します.
    1.時差を考慮しない場合は、Localで始まるクラスを使用します.
    2.時差ぼけの処理には、Offsetで始まるクラスを使用します.
    3.時差ぼけだけでなく現地時間も考慮した場合はZonedDateTimeを使用することをお勧めします.
    // 시차 X 
    LocalDateTime localDateTime = LocalDateTime.now();
    // 시차 O 
    OffsetDateTime offsetDateTime = OffsetDateTime.of(2022, Month.MARCH.getValue(), 26, 20, 30, 30, 0, ZoneOffset.of("+09:00"));
    // 시차 O, 지역 정보 O
            ZonedDateTime zonedDateTime = ZonedDateTime.parse("2022-03-26T20:30+09:00[Asia/Seoul]");
    LocalDataTimeではnewを使用してオブジェクトを作成できません.静的メソッドを使用して作成する必要があります.now以外にも、度(Do)を作成する方法はいくつかあります.

    期間


    処理期間には2つのクラスがあります.
    1.Period:日付間隔を扱うクラス
    2.Duration:時間間隔クラス
    Period period = Period.between(localDateTime1.toLocalDate(), localDateTime2.toLocalDate());
    period.getYears(); // 연차
    period.getMonth(); // 월차
    period.getDays(); // 일차
    period.toTotalMonths(); // 누적
    
    Duration duration = Duration.between(localDateTime1, localDateTime2);
    duration.getNano(); // 나노차
    duration.toDays(); // 일차
    duration.toHours(); // 시간차
    duration.toMinutes(); // 분차
    duration.getSeconds(); // 초치
    duration.toMillis(); // 밀리초차
    duration.toNanos(); // 나노차
    PeriodとDurationは両者の間の方法を用いて持続時間を決定した.
  • 2つのクラスは、加算および減算メソッドを使用して計算の継続時間をランダムに変更できます.
  • Date-time APIのDate、Calendarクラスのサポート


    多くのアプリケーションでは、CalendarクラスとDateクラスが使用されています.このようなシステムでDate-timeを使用するには、CalendarとDateに変換する必要があります.このため、Date-timeはInstantクラスを使用した変換をサポートします.
    Instant instant = localDateTime.toInstant(ZoneOffset.of("+09:00"));
    Date date = Date.from(instant);
    日時APIはナノ秒までカウントできますが、CalendarクラスとDateクラスはミリ秒までカウントできるので、変換時にデータが失われないことに注意してください.