Javaで日付と時刻を検証する正規表現の書き方|Pattern・Matcherの基本
指定した文字列に対して正規表現によるマッチングを行うには、次の手順に従います。
- 正規表現のコンパイル:Patternクラスのcompile()メソッドを使って、正規表現をコンパイルします。
- Matcherオブジェクトの取得:Patternクラスのmatcher()メソッドに、検証対象の入力文字列を引数として渡し、Matcherオブジェクトを取得します。
- マッチングの実行:Matcherクラスのmatches()メソッドは、文字列がパターンに完全一致すればtrue、一致しなければfalseを返します。このメソッドを呼び出すことで、データの妥当性を検証できます。
日付「yyyy-MM-dd」にマッチする正規表現
本記事で使用する日付の正規表現は「[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])」です。各要素の意味は次のとおりです。
- [0-9]{4}:4桁の年(例:1990)
- (0[1-9]|1[0-2]):01〜12の月
- (0[1-9]|[1-2][0-9]|3[0-1]):01〜31の日
サンプルコード:日付のみを検証する
以下は、リスト内の各文字列が「yyyy-MM-dd」形式の日付として有効かどうかを判定するJavaプログラムです。
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Sample {
public static void main(String args[]){
// 日付を格納するリストを作成
List dates = new ArrayList();
dates.add("25-12-1990");
dates.add("25/12/1990");
dates.add("2010-06-24");
dates.add("05-02-1990");
dates.add("1920-11-03");
// 日付にマッチする正規表現
String regex = "[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])";
// 正規表現をコンパイル
Pattern pattern = Pattern.compile(regex);
// 各日付を照合
for(Object date : dates) {
Matcher matcher = pattern.matcher((CharSequence) date);
System.out.println(date +": "+ matcher.matches());
}
}
}
実行結果
25-12-1990: false 25/12/1990: false 2010-06-24: true 05-02-1990: false 1920-11-03: true
「25-12-1990」と「05-02-1990」は先頭が4桁の年ではないためfalse、「25/12/1990」は区切り文字がスラッシュ(/)であるためfalseと判定されます。一方、「2010-06-24」と「1920-11-03」はパターンどおりの形式なのでtrueとなります。
日付と時刻「yyyy-MM-dd hh:mm:ss」にマッチする正規表現
次に、日付に加えて時刻まで含む文字列を検証する例を紹介します。時刻部分のパターン「(2[0-3]|[01][0-9]):[0-5][0-9]:[0-5][0-9]」は、以下の要素で構成されています。
- (2[0-3]|[01][0-9]):00〜23の時
- [0-5][0-9]:00〜59の分
- [0-5][0-9]:00〜59の秒
サンプルコード:日付と時刻を検証する
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Sample {
public static void main(String args[]){
// 日付を格納するリストを作成
List dates = new ArrayList();
dates.add("25-12-1990");
dates.add("25/12/1990");
dates.add("2010-06-24 12:30:40");
dates.add("05-02-1990 44:205:40");
dates.add("1920-11-03 06:25:40");
// 日付と時刻にマッチする正規表現
String regex = "[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]) (2[0-3]|[01][0-9]):[0-5][0-9]:[0-5][0-9]";
// 正規表現をコンパイル
Pattern pattern = Pattern.compile(regex);
// 各日付を照合
for(Object date : dates) {
Matcher matcher = pattern.matcher((CharSequence) date);
System.out.println(date +": "+ matcher.matches());
}
}
}
実行結果
25-12-1990: false 25/12/1990: false 2010-06-24 12:30:40: true 05-02-1990 44:205:40: false 1920-11-03 06:25:40: true
時は00〜23、分と秒はそれぞれ00〜59の範囲でのみtrueとなるため、「44:205:40」のような範囲外の時刻を含む文字列はfalseと判定されます。このように正規表現を活用することで、ユーザー入力やログデータなどから、正しい形式の日付・日時だけを効率的に抽出・検証できます。
-
JavaのLayoutManager(レイアウトマネージャー)とは?6つの種類と使い方を解説
LayoutManager(レイアウトマネージャー)は、GUIフォーム上に視覚コンポーネントをどのように配置するかを制御するための仕組みです。コンテナ内における各コンポーネントのサイズと位置を自動的に決定することで、ウィンドウサイズが変わっても整然としたユーザーインターフェースを維持できます。 LayoutManagerの種類 Javaには、標準で以下の6種類のレイアウトマネージャーが用意されています。 FlowLayout(フローレイアウト):コンポーネントをページ上の文章のように配置します。上段から左から右へ、上から下へと順に詰めていき、追加された順序どおりに並びます。最初のコンポーネン
-
Linuxでシャットダウンと再起動の日時を確認する方法
Linuxマシンがいつシャットダウンしたのか、いつ再起動したのか、あるいはどのくらいの時間稼働し続けているのかを知りたい場面は多々あります。特に、誰も見ていない間に発生したトラブルの原因を調査する際には、こうした情報が非常に役立ちます。幸いなことに、多くのディストリビューションではシステムイベントが自動的に詳細に記録されており、コマンドラインからそのログ情報へ簡単にアクセスできます。 最後の起動日時を確認する コンピュータが最後に起動した日時を確認したい場合は、whoコマンドに-bオプションを付けて実行します。ターミナルに正確な日付と時刻が表示されます。root権限は不要なので、気軽に試し