Tempoh dan Tempoh di Jawa

1. Gambaran keseluruhan

Dalam tutorial ringkas ini, kita akan melihat dua kelas baru untuk bekerja dengan tarikh yang diperkenalkan di Java 8: Tempoh dan Tempoh .

Kedua-dua kelas boleh digunakan untuk mewakili jumlah masa atau menentukan perbezaan antara dua tarikh. Perbezaan utama antara dua kelas adalah bahawa Tempoh menggunakan nilai berdasarkan tarikh, sementara Tempoh menggunakan nilai berdasarkan masa.

2. Kelas Berkala

The Tempoh kelas menggunakan unit tahun, bulan dan hari untuk mewakili tempoh masa.

Kita dapat memperoleh objek Period sebagai perbezaan antara dua tarikh dengan menggunakan kaedah antara () :

LocalDate startDate = LocalDate.of(2015, 2, 20); LocalDate endDate = LocalDate.of(2017, 1, 15); Period period = Period.between(startDate, endDate);

Kemudian, kita dapat menentukan unit tarikh dalam tempoh menggunakan kaedah getYears (), getMonths (), getDays () :

LOG.info("Years:" + period.getYears() + " months:" + period.getMonths() + " days:"+period.getDays());

Dalam kes ini, () isNegative kaedah, yang mengembalikan benar jika mana-mana unit yang negatif, boleh digunakan untuk menentukan sama ada endDate adalah lebih tinggi daripada startDate :

assertFalse(period.isNegative());

Sekiranya isNegative () kembali palsu, maka startDate lebih awal daripada nilai endDate .

Cara lain untuk membuat objek Period adalah berdasarkan jumlah hari, bulan, minggu atau tahun menggunakan kaedah khusus:

Period fromUnits = Period.of(3, 10, 10); Period fromDays = Period.ofDays(50); Period fromMonths = Period.ofMonths(5); Period fromYears = Period.ofYears(10); Period fromWeeks = Period.ofWeeks(40); assertEquals(280, fromWeeks.getDays());

Sekiranya hanya ada satu nilai yang ada, misalnya dengan menggunakan kaedah ofDays () , maka nilai unit lain adalah 0.

Bagi kaedah ofWeeks () , nilai parameter digunakan untuk menetapkan jumlah hari dengan mengalikannya dengan 7.

Kita juga dapat membuat objek Period dengan menguraikan urutan teks , yang harus memiliki format "PnYnMnD":

Period fromCharYears = Period.parse("P2Y"); assertEquals(2, fromCharYears.getYears()); Period fromCharUnits = Period.parse("P2Y3M5D"); assertEquals(5, fromCharUnits.getDays());

Nilai tempoh dapat ditingkatkan atau diturunkan dengan menggunakan metode bentuk plusX () dan minusX () , di mana X mewakili unit tarikh:

assertEquals(56, period.plusDays(50).getDays()); assertEquals(9, period.minusMonths(2).getMonths());

3. Kelas Jangka Masa

The Tempoh kelas mewakili selang masa dalam saat atau nanosaat dan yang paling sesuai untuk mengendalikan jumlah yang lebih singkat, dalam kes-kes yang memerlukan lebih tepat.

Kita dapat menentukan perbezaan antara dua instan sebagai objek Duration menggunakan kaedah antara () :

Instant start = Instant.parse("2017-10-03T10:15:30.00Z"); Instant end = Instant.parse("2017-10-03T10:16:30.00Z"); Duration duration = Duration.between(start, end);

Kemudian kita boleh menggunakan kaedah getSeconds () atau getNanoseconds () untuk menentukan nilai unit masa:

assertEquals(60, duration.getSeconds());

Sebagai alternatif, kita dapat memperoleh instance Duration dari dua contoh LocalDateTime:

LocalTime start = LocalTime.of(1, 20, 25, 1024); LocalTime end = LocalTime.of(3, 22, 27, 1544); Duration.between(start, end).getSeconds();

Kaedah isNegative () dapat digunakan untuk mengesahkan jika saat akhir lebih tinggi daripada permulaan segera:

assertFalse(duration.isNegative());

Kita juga dapat memperoleh objek Durasi berdasarkan beberapa unit waktu , menggunakan kaedahDays (), ofHours (), ofMillis (), ofMinutes (), ofNanos (), ofSeconds () :

Duration fromDays = Duration.ofDays(1); assertEquals(86400, fromDays.getSeconds()); Duration fromMinutes = Duration.ofMinutes(60);

Untuk membuat objek Duration berdasarkan urutan teks, ini harus berbentuk "PnDTnHnMn.nS":

Duration fromChar1 = Duration.parse("P1DT1H10M10.5S"); Duration fromChar2 = Duration.parse("PT10M");

Tempoh boleh ditukar ke unit waktu lain menggunakan toDays (), toHours (), toMillis (), toMinutes () :

assertEquals(1, fromMinutes.toHours());

Nilai durasi dapat ditingkatkan atau dikurangkan dengan menggunakan kaedah bentuk plusX () atau minusX () , di mana X dapat bertahan selama berhari-hari, jam, mil, minit, nano atau saat:

assertEquals(120, duration.plusSeconds(60).getSeconds()); assertEquals(30, duration.minusSeconds(30).getSeconds());

Kita juga dapat menggunakan metode plus () dan minus () dengan parameter yang menentukan TemporalUnit untuk menambah atau mengurangkan:

assertEquals(120, duration.plus(60, ChronoUnit.SECONDS).getSeconds()); assertEquals(30, duration.minus(30, ChronoUnit.SECONDS).getSeconds());

4. Kesimpulan

Dalam tutorial ini, kami telah menunjukkan bagaimana kami dapat menggunakan kelas Period dan Tempoh .

Seperti biasa, kod sumber penuh contoh boleh didapati di GitHub.