この記事は、Huawei Cloud Community「初心者から熟練者まで: コードをシンプルにするための SimpleDateFormat クラスの高度な使用法!」から共有されたものです。』、著者:虫菌。
環境説明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8
@[トピック]
序文
開発において日付と時刻は非常に一般的な要件であり、特に時間関連のビジネス ロジックを扱う場合、日付と時刻に関するフォーマット、比較、その他の操作が必要になります。Java では、SimpleDateFormat
クラスを使用して日付と時刻の書式設定と解析操作を簡単に実行できます。
SimpleDateFormat
この記事では、読者がこのクラスの使用法をよりよく理解し、コードをより簡潔にすることを目的として、クラスの高度な使用法を紹介します。
まとめ
この記事では、次の側面について紹介します。
SimpleDateFormat
クラスの概要と一般的な使用法SimpleDateFormat
クラスの高度な使用法- コードの実装とテストケース
- 要約と結論
SimpleDateFormat クラス
概要
SimpleDateFormat
Class は、日時の書式設定と解析に使用される Java のクラスです。一連の構築メソッドとフォーマット文字列を提供し、日付と時刻を簡単にフォーマットおよび解析できるようにします。
長所と短所
SimpleDateFormat
これは Java で日付と時刻の書式設定に使用されるクラスで、DateFormat クラスを継承しており、スレッドアンセーフなクラスです。
アドバンテージ:
- シンプルで使いやすく、日付を指定した形式にすばやくフォーマットしたり、文字列を対応する日付オブジェクトに変換したりできます。
- 日付形式はカスタマイズでき、複数の事前定義された形式がサポートされています。
- 日付の解析とフォーマット操作に使用できます。
欠点:
SimpleDateFormat
これはスレッドセーフではないため、マルチスレッド環境での使用には適していません。- 年、月、日、時、分、秒、ミリ秒などの一部の日付形式では、それらを表すために特定の文字を使用する必要があり、これらの文字はある程度の困難と複雑さを伴います。
アプリケーションシナリオ
SimpleDateFormat
ロギング、データベース操作、電子商取引、その他の分野など、日付の書式設定と解析のシナリオに適しています。たとえば、タイムスタンプを指定された形式の日付文字列に変換したり、日付文字列を対応する日付オブジェクトに解析したりできます。SimpleDateFormat
ただし、スレッドセーフではないため、マルチスレッド環境で使用する場合は同期するか、ライブラリにあるものなどのスレッドセーフな代替手段を使用する必要があることに注意しJoda-Time
てくださいDateTimeFormatter
。
ソースコード分析
SimpleDateFormat
これは Java の古典的な時刻フォーマット クラスであり、時刻を指定された形式の文字列に変換したり、文字列を指定された形式の時刻に変換したりすることができます。
このうちSimpleDateFormat
、クラスのソースコードは、多くの時間を要する書式設定ルールが含まれるため、より複雑になります。ここでは、その実装原理を簡単に分析するだけです。
1.コンストラクター
SimpleDateFormat
クラスには複数のコンストラクターがあり、そのうち次の 2 つがより一般的に使用されます。
public SimpleDateFormat(文字列パターン) public SimpleDateFormat(文字列パターン, ロケール ロケール)
最初のコンストラクターのパラメーターは、時刻書式設定テンプレート、つまり時刻文字列の形式です。2 番目のコンストラクターでは、地理的位置情報を指定できます。
2.フォーマット時間
SimpleDateFormat
時刻を文字列にフォーマットするクラスの主なメソッドは format() です。このメソッドは Date 型パラメータを受け取り、フォーマットされた時刻文字列を返します。
3. 解析時間
SimpleDateFormat
文字列を時刻に解析するクラスの主なメソッドは、parse()
このメソッドがパラメータとして時刻文字列を受け取り、Date 型の日付オブジェクトを返すことです。
4. スレッドの安全性
SimpleDateFormat
このクラスは、内部状態が複数のスレッドによって同時に変更される可能性があるため、スレッドセーフではありません。マルチスレッド環境で使用したい場合は、ThreadLocal
スレッド分離を実現するために使用できます。
一般に、SimpleDateFormat
このクラスは Java で非常に一般的に使用される時刻フォーマット クラスであり、時刻を指定された形式の文字列に簡単に変換でき、文字列を時刻に解析することもできます。使用するときは、スレッドの安全性に注意する必要があります。
よくある使い方
SimpleDateFormat
クラスの一般的な使用例をいくつか示します。
1. 日付と時刻のフォーマット
SimpleDateFormat クラスのメソッドはformat()
、指定された形式に従って日付と時刻をフォーマットできます。例えば:
パッケージcom.demo.javase.day53; インポート java.text.SimpleDateFormat; java.util.Dateをインポートします。 /** * @author バグ菌 * @date 2023/10/17 19:17 */ public class SimpleDateFormatTest { //格式化日期间 public static void testFormat(){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 文字列 dateStr = sdf.format(new Date()); System.out.println(dateStr); public static void main(String[] args) { testFormat(); } }
上記コードは現在時刻を「yyyy-MM-dd HH:mm:ss」の形式に整形して出力します。
出力は次のとおりです。
2023-10-17 19:21:45
実行結果のスクリーンショットは次のとおりです。
2. 日付と時刻を解析する
SimpleDateFormat
このクラスのメソッドはparse()
、特定の形式の文字列を Date オブジェクトに解析できます。例えば:
// 解析日期間中 public static void testParse() throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 日付 date = sdf.parse("2023-10-17"); System.out.println(日付); public static void main(String[] args) throws ParseException { testParse() ; }
上記のコードは、文字列「2021-08-01」を Date オブジェクトに解析して出力します。出力は次のとおりです。
2023 年 10 月 17 日火曜日 00:00:00 CST
実行結果のスクリーンショットは次のとおりです。
3. タイムゾーンを設定する
SimpleDateFormat クラスのメソッドはsetTimeZone()
タイムゾーンを設定できます。例えば:
//設置区時間 public static void testSetTimeZone(){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); sdf.setTimeZone(TimeZone.getTimeZone("GMT+8")); 文字列 dateStr = sdf.format(new Date()); System.out.println(dateStr); public static void main(String[] args) throws ParseException { testSetTimeZone(); } }
上記のコードは、タイム ゾーンを設定しGMT+8
、出力用に現在時刻を「yyyy-MM-dd HH:mm:ss」の形式に設定します。出力は次のとおりです。
2023-10-17 19:25:43
実行結果のスクリーンショットは次のとおりです。
高度な使用法
上記の一般的な使用法に加えて、SimpleDateFormat
このクラスには日付と時刻をより柔軟にフォーマットおよび解析できる高度な使用法もいくつかあります。
1. エスケープ文字
SimpleDateFormat
このクラスは、特殊文字を出力するためのエスケープ文字の使用をサポートしています。例えば:
//转义字符 public static void testSimpleDateFormat(){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss"); 文字列 dateStr = sdf.format(new Date()); System.out.println(dateStr); public static void main(String[] args) throws ParseException { testSimpleDateFormat(); } }
上記のコードでは、一重引用符を使用して「at」を囲み、出力文字「at」を示します。出力は次のとおりです。
2023-10-17 19:27:24
実行結果のスクリーンショットは次のとおりです。
2. 数値の書式設定
SimpleDateFormat
このクラスは、数値の書式設定に「#」と「0」の使用をサポートします。このうち「#」は任意の桁を示し、「0」は欠落した桁を0で埋めることを示します。例えば:
// 数字格式化 public static void testSimpleDateFormat_1(){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 文字列 dateStr = sdf.format(new Date()); System.out.println(dateStr); public static void main(String[] args) throws ParseException { testSimpleDateFormat_1() ; }
上記コードは現在時刻を「yyyy-MM-dd HH:mm:ss.SSS」の形式に整形して出力します。出力は次のとおりです。
2023-10-17 19:28:31.478
実行結果のスクリーンショットは次のとおりです。
3. フォーマットモード
SimpleDateFormat
このクラスは、日付と時刻を出力するための書式設定パターンの使用をサポートしています。書式パターンは日付と時刻で構成されており、自由に組み合わせることができます。日付形式モードには、年、月、日、曜日などをそれぞれ表す「y」、「M」、「d」、「E」などが含まれます。時刻フォーマット モードには、「H」、「m」、「s」、「S」などが含まれ、それぞれ時、分、秒、ミリ秒などを表します。例えば:
//格式化模式 public static void testSimpleDateFormat_2() { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd E HH:mm:ss"); 文字列 dateStr = sdf.format(new Date()); System.out.println(dateStr); public static void main(String[] args) throws ParseException { testSimpleDateFormat_2(); } }
上記のコードは、現在時刻を「yyyy-MM-dd E HH:mm:ss」の形式に整形して出力します。出力は次のとおりです。
2023-10-17 火曜日 19:29:42
実行結果のスクリーンショットは次のとおりです。
テストケース
コード例
以下は、SimpleDateFormat
クラスを使用するためのサンプル コードとテスト ケースです。
package com.demo.javase.day53; import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimeZone; /** * @author bugbug * @date 2023/10/17 19:17 * / public class SimpleDateFormatDemo { public static void main(String[] args) throws Exception { // 日付と時刻のフォーマット SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateStr1 = sdf1.format ( new Date()); System.out.println(dateStr1); // 日付と時刻を解析 SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd"); Date date2 = sdf2.parse("2023-10-17" ); System.out.println(date2); // タイムゾーンを設定 SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); sdf3.setTimeZone(TimeZone.getTimeZone("GMT+8") ) ; String dateStr3 = sdf3.format(new Date()); System.out.println(dateStr3); // エスケープ文字 SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss") ; String dateStr4 = sdf4.format(new Date()); System.out.println(dateStr4); // 数値の書式設定 SimpleDateFormat sdf5 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS"); String dateStr5 = sdf5.format(new Date()); System.out.println(dateStr5); // フォーマットモード SimpleDateFormat sdf6 = new SimpleDateFormat("yyyy-MM-dd E HH:mm:ss"); String dateStr6 = sdf6 .format(new Date()); System.out.println(dateStr6); } }
コード分析
上記のテスト ケース コードについて、SimpleDateFormat
Java のクラスを使用して日付の書式設定と解析を行う方法を説明します。
日付時刻の書式設定
使用されるSimpleDateFormat
方法format()
は、現在の時刻をフォーマットし、指定された形式で時刻を出力することです。
日付時刻を解析する
SimpleDateFormatparse()
メソッドを使用して、文字列を Date 型の日付に変換します。
タイムゾーンを設定する
SimpleDateFormatsetTimeZone()
メソッドを使用してタイム ゾーンを設定し、デフォルトのタイム ゾーンを GMT+8 に変更します。
エスケープ文字
一重引用符と二重引用符を使用して文字を囲み、コンテンツのこの部分を書式設定する必要がないことを示します。
数値の書式設定
フォーマットされた日付にミリ秒を追加します。
フォーマットモード
定義された書式設定モードを使用してSimpleDateFormat
、日付、曜日、時刻を指定された形式で出力します。
全体として、SimpleDateFormat
通常の日付形式の変換や単純な日付計算を処理するのに最適です。ただし、スレッドセーフではないことに注意してください。マルチスレッド環境で使用する場合は、同期するか、ThreadLocal
スレッドローカル変数を実装するために使用する必要があります。
テストの実行
出力は次のとおりです。
2023-10-17 19:31:16
火曜日 10 月 17 日 00:00:00 CST 2023
2023-10-17 19:31:16
2023-10-17 19:31:16
2023/10/17 19:31: 16.783
2023-10-17 火曜日 19:31:16\
実行結果のスクリーンショットは次のとおりです。
まとめ
SimpleDateFormat
この記事では、クラスの概要と一般的な使用法、およびいくつかの高度な使用法を読者に紹介します。この記事を学ぶことで、読者はSimpleDateFormat
クラスの使用法をよりよく習得し、コードをより簡潔にすることができます。
付録のソースコード
上記のすべてのソース コードは「Gitee」にアップロードおよび同期されており、学生がより早く習得できるように 1 対 1 のリファレンス学習を提供します。
要約する
一般に、この記事では、SimpleDateFormat
Java で一般的に使用される日付フォーマットおよび解析クラスの概要、一般的な使用法、および高度な使用法と、このクラスを使用したテスト ケースおよびコード実装について紹介します。その中で、一般的な使用法には日付と時刻の書式設定、日付と時刻の解析、タイムゾーンの設定が含まれ、高度な使用法には文字のエスケープ、数値の書式設定、および書式設定モードが含まれます。
さらに、この記事では、SimpleDateFormat
メリット、デメリット、適用シナリオについても説明します。SimpleDateFormat
これはスレッドアンセーフなクラスであるため、マルチスレッド環境で同期するか、スレッドセーフな代替クラスを使用する必要があることに注意してください。この記事を学ぶことで、読者はSimpleDateFormat
クラスの使用法をよりよく習得し、日付と時刻をより柔軟に扱うことができるようになります。
クリックしてフォローし、できるだけ早くHuawei Cloudの新しいテクノロジーについて学びましょう~
雷軍氏: Xiaomi の新オペレーティング システム ThePaper OS の正式版がパッケージ化されました Gome App の宝くじページのポップアップ ウィンドウが創設者を侮辱 米 政府が NVIDIA H800 GPU の中国への輸出を制限 Xiaomi ThePaper OS インターフェース マスターが Scratch を使用して RISC-V シミュレータを操作し、正常に実行されました Linux カーネル RustDesk リモート デスクトップ 1.2.3 がリリースされ、Wayland サポートが強化されました Logitech USB レシーバーを取り外した後、Linux カーネルがクラッシュしました DHH の「パッケージング ツール」のシャープ レビュー": フロントエンドはまったくビルドする必要がありません (No Build) JetBrains が技術文書を作成するために Writerside を起動 Node.js 21 用ツールが正式リリース