Java8の日付と時刻の操作
1.はじめに
Java 8より前は、日付時刻APIは開発者から批判されていました。たとえば、java.util.Dateは変数型であり、SimpleDateFormatはスレッドセーフではないなどの問題があります。したがって、Java8は新しい日付と時刻処理APIのセットを導入しました。新しいAPIはISO標準カレンダーシステムに基づいています。
第二に、日付
例1:今日の日付を取得する
Java 8のLocalDateは、今日の日付を表すために使用されます。java.util.Dateとは異なり、日付のみがあり、時刻はありません。
public static void main(String [] args){ LocalDate date = LocalDate.now(); System.out.println( "当前日期=" +日付); }
例2:指定された日付を作成する
ファクトリメソッドLocalDate.of()を呼び出して任意の日付を作成します。このメソッドは、年、月、日をパラメータとして渡し、対応するLocalDateインスタンスを返す必要があります。この方法の利点は、年が1900年に始まる、月が0から始まるなど、古いAPIの設計エラーがなくなることです。
public static void main(String [] args){ LocalDate date = LocalDate.of(2000、1、1); System.out.println( "千熙年=" +日付); }
例3:年、月、日の情報を取得する
public static void main(String [] args){ LocalDate date = LocalDate.now(); System.out.printf( "年=%d、月=%d、日=%d"、date.getYear()、date.getMonthValue()、date.getDayOfMonth()); }
例4:2つの日付が等しいかどうかを比較する
public static void main(String [] args){ LocalDate now = LocalDate.now(); LocalDateの日付= LocalDate.of(2018、9、24); System.out.println( "日期是否相等=" + now.equals(date)); }
3.知る時間
例:現在の時刻を取得する
Java 8のLocalTimeは、時刻を示すために使用されます。java.util.Dateとは異なり、時刻のみで日付はありません。
public static void main(String [] args){ LocalTime time = LocalTime.now(); System.out.println( "当前時間间=" +時間); }
第四に、比較と計算
例1:日付と時刻の計算
Java8は、日付と時刻の増分値を計算するための新しいplusXxx()メソッドを提供し、元のadd()メソッドを置き換えます。新しいAPIは、新しいオブジェクトで受信する必要がある真新しい日付と時刻の例を返します。
public static void main(String [] args){
// 時间增量LocalTime time = LocalTime.now(); LocalTime newTime = time.plusHours(2); System.out.println( "newTime =" + newTime); // 日期增量LocalDate date = LocalDate.now(); LocalDate newDate = date.plus(1、ChronoUnit.WEEKS); System.out.println( "newDate =" + newDate); }
例2:日時の比較
Java8には、現在の日時と指定された日時の比較を判断するためのisAfter()およびisBefore()が用意されています
public static void main(String [] args){ LocalDate now = LocalDate.now(); LocalDate date1 = LocalDate.of(2000、1、1); if(now.isAfter(date1)){ System.out.println( "ミレニアムが過ぎた"); } LocalDate date2 = LocalDate.of(2020、1、1); if(now.isBefore(date2)){ System.out.println( "2020がまだ到着していない"); } }
V.タイムゾーン
例:時間帯付きの日時を作成する
Java 8では、日付と時刻だけでなく、タイムゾーンも分離されます。特定のタイムゾーンを処理するZoneIdや、特定のタイムゾーンの時間を表すZoneDateTimeクラスなど、一連の個別のクラスがあります。
public static void main(String [] args){ //上海时间 ZoneId shanghaiZoneId = ZoneId.of( "Asia / Shanghai"); ZonedDateTime shanghaiZonedDateTime = ZonedDateTime.now(shanghaiZoneId); //东京时间 ZoneId tokyoZoneId = ZoneId.of( "Asia / Tokyo"); ZonedDateTime tokyoZonedDateTime = ZonedDateTime.now(tokyoZoneId); DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "yyyy-MM-dd HH:mm:ss"); System.out.println( "上海时间:" + shanghaiZonedDateTime.format(formatter)); System.out.println( "东京时间:" + tokyoZonedDateTime.format(formatter)); }
6、フォーマット
例1:事前定義されたフォーマットを使用して日付を解析およびフォーマットする
public static void main(String [] args){ //日付の解析 String dateText = "20180924"; LocalDate date = LocalDate.parse(dateText、DateTimeFormatter.BASIC_ISO_DATE); System.out.println( "Date after format =" + date); //形式日付 dateText = date.format(DateTimeFormatter.ISO_DATE); System.out.println( "dateText =" + dateText); }
例2:日付と文字列間の変換
public static void main(String [] args){ DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "yyyy-MM-dd HH:mm:ss"); //日期时间转字符串 LocalDateTime now = LocalDateTime.now(); 文字列nowText = now.format(formatter); System.out.println( "nowText =" + nowText); //字符串转日期时间 String datetimeText = "1999-12-31 23:59:59"; LocalDateTime datetime = LocalDateTime.parse(datetimeText、formatter); System.out.println(datetime); }
7、関連説明
インスタントタイムスタンプ 期間期間、時差 LocalDateには日付のみが含まれます。例:2018-09-24 LocalTimeには時刻のみが含まれます。例:10:32:10 LocalDateTimeには日付と時刻が含まれます。例:2018-09-24 10:32:10 Peroidタイムゾーン ZoneOffsetタイムゾーンオフセット。例:+8:00 ZonedDateTime date timeタイムゾーン付き クロッククロック。現在のタイムスタンプを取得するために使用できます java.time.format.DateTimeFormatter時間フォーマットクラス
1.はじめに
Java 8より前は、日付時刻APIは開発者から批判されていました。たとえば、java.util.Dateは変数型であり、SimpleDateFormatはスレッドセーフではないなどの問題があります。したがって、Java8は新しい日付と時刻処理APIのセットを導入しました。新しいAPIはISO標準カレンダーシステムに基づいています。
第二に、日付
例1:今日の日付を取得する
Java 8のLocalDateは、今日の日付を表すために使用されます。java.util.Dateとは異なり、日付のみがあり、時刻はありません。
public static void main(String [] args){ LocalDate date = LocalDate.now(); System.out.println( "当前日期=" +日付); }
例2:指定された日付を作成する
ファクトリメソッドLocalDate.of()を呼び出して任意の日付を作成します。このメソッドは、年、月、日をパラメータとして渡し、対応するLocalDateインスタンスを返す必要があります。この方法の利点は、年が1900年に始まる、月が0から始まるなど、古いAPIの設計エラーがなくなることです。
public static void main(String [] args){ LocalDate date = LocalDate.of(2000、1、1); System.out.println( "千熙年=" +日付); }
例3:年、月、日の情報を取得する
public static void main(String [] args){ LocalDate date = LocalDate.now(); System.out.printf( "年=%d、月=%d、日=%d"、date.getYear()、date.getMonthValue()、date.getDayOfMonth()); }
例4:2つの日付が等しいかどうかを比較する
public static void main(String [] args){ LocalDate now = LocalDate.now(); LocalDateの日付= LocalDate.of(2018、9、24); System.out.println( "日期是否相等=" + now.equals(date)); }
3.知る時間
例:現在の時刻を取得する
Java 8のLocalTimeは、時刻を示すために使用されます。java.util.Dateとは異なり、時刻のみで日付はありません。
public static void main(String [] args){ LocalTime time = LocalTime.now(); System.out.println( "当前時間间=" +時間); }
第四に、比較と計算
例1:日付と時刻の計算
Java8は、日付と時刻の増分値を計算するための新しいplusXxx()メソッドを提供し、元のadd()メソッドを置き換えます。新しいAPIは、新しいオブジェクトで受信する必要がある真新しい日付と時刻の例を返します。
public static void main(String [] args){
// 時间增量LocalTime time = LocalTime.now(); LocalTime newTime = time.plusHours(2); System.out.println( "newTime =" + newTime); // 日期增量LocalDate date = LocalDate.now(); LocalDate newDate = date.plus(1、ChronoUnit.WEEKS); System.out.println( "newDate =" + newDate); }
例2:日時の比較
Java8には、現在の日時と指定された日時の比較を判断するためのisAfter()およびisBefore()が用意されています
public static void main(String [] args){ LocalDate now = LocalDate.now(); LocalDate date1 = LocalDate.of(2000、1、1); if(now.isAfter(date1)){ System.out.println( "ミレニアムが過ぎた"); } LocalDate date2 = LocalDate.of(2020、1、1); if(now.isBefore(date2)){ System.out.println( "2020がまだ到着していない"); } }
V.タイムゾーン
例:時間帯付きの日時を作成する
Java 8では、日付と時刻だけでなく、タイムゾーンも分離されます。特定のタイムゾーンを処理するZoneIdや、特定のタイムゾーンの時間を表すZoneDateTimeクラスなど、一連の個別のクラスがあります。
public static void main(String [] args){ //上海时间 ZoneId shanghaiZoneId = ZoneId.of( "Asia / Shanghai"); ZonedDateTime shanghaiZonedDateTime = ZonedDateTime.now(shanghaiZoneId); //东京时间 ZoneId tokyoZoneId = ZoneId.of( "Asia / Tokyo"); ZonedDateTime tokyoZonedDateTime = ZonedDateTime.now(tokyoZoneId); DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "yyyy-MM-dd HH:mm:ss"); System.out.println( "上海时间:" + shanghaiZonedDateTime.format(formatter)); System.out.println( "东京时间:" + tokyoZonedDateTime.format(formatter)); }
6、フォーマット
例1:事前定義されたフォーマットを使用して日付を解析およびフォーマットする
public static void main(String [] args){ //日付の解析 String dateText = "20180924"; LocalDate date = LocalDate.parse(dateText、DateTimeFormatter.BASIC_ISO_DATE); System.out.println( "Date after format =" + date); //形式日付 dateText = date.format(DateTimeFormatter.ISO_DATE); System.out.println( "dateText =" + dateText); }
例2:日付と文字列間の変換
public static void main(String [] args){ DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "yyyy-MM-dd HH:mm:ss"); //日期时间转字符串 LocalDateTime now = LocalDateTime.now(); 文字列nowText = now.format(formatter); System.out.println( "nowText =" + nowText); //字符串转日期时间 String datetimeText = "1999-12-31 23:59:59"; LocalDateTime datetime = LocalDateTime.parse(datetimeText、formatter); System.out.println(datetime); }
7、関連説明
インスタントタイムスタンプ 期間期間、時差 LocalDateには日付のみが含まれます。例:2018-09-24 LocalTimeには時刻のみが含まれます。例:10:32:10 LocalDateTimeには日付と時刻が含まれます。例:2018-09-24 10:32:10 Peroidタイムゾーン ZoneOffsetタイムゾーンオフセット。例:+8:00 ZonedDateTime date timeタイムゾーン付き クロッククロック。現在のタイムスタンプを取得するために使用できます java.time.format.DateTimeFormatter時間フォーマットクラス