Java日期正则表达式
在Java开发中,日期是常见的数据类型之一,经常需要进行日期格式验证、转换、操作等处理。为了方便对日期进行有效的处理,在Java中使用正则表达式对日期进行格式校验是非常必要的。本文将分享Java日期正则表达式的相关知识。
日期格式化
Java中提供了SimpleDateFormat类来格式化日期,通过定义日期格式化模板,可以将日期转换成指定的字符串或将字符串转换成日期对象。在进行日期格式化时,需要先了解Java中常见的日期格式化符号,如表所示:
符号 | 说明 |
---|---|
y |
年 |
M |
月 |
d |
日 |
H |
24小时制的小时 |
h |
12小时制的小时 |
m |
分钟 |
s |
秒 |
S |
毫秒 |
通过这些符号的组合,可以构成日期格式化模板。例如,yyyy-MM-dd HH:mm:ss
表示年月日时分秒。
以下是将日期按照指定格式格式化的示例代码:
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateDemo {
public static void main(String[] args) {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = sdf.format(date);
System.out.println(str);
}
}
上述代码中,我们首先通过Date类获取当前系统时间,然后使用SimpleDateFormat类定义日期格式化模板,并将日期转换成字符串输出。
日期正则表达式
在Java中,使用正则表达式对日期进行格式校验,可以通过Pattern类和Matcher类来实现。
匹配年月日格式
以下是匹配年月日格式的正则表达式示例代码:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class DateDemo {
public static boolean isMatched(String target) {
String regex = "^\\d{4}-\\d{2}-\\d{2}$";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(target);
return matcher.matches();
}
public static void main(String[] args) {
String str1 = "2020-01-01";
String str2 = "2020-01-1";
System.out.println(isMatched(str1));
System.out.println(isMatched(str2));
}
}
在上面的示例代码中,我们定义了一个名为isMatched的方法,用于判断字符串是否匹配年月日的格式。正则表达式^\d{4}-\d{2}-\d{2}$
的含义为:以四位数字开头,然后是一个连字符-
,接着两位数字,再以连字符-
作为分割,最后两位数字结束。Matcher类的matches方法用于返回匹配结果,如果匹配成功则返回true,否则返回false。
匹配日期时间格式
以下是匹配日期时间格式的正则表达式示例代码:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class DateDemo {
public static boolean isMatched(String target) {
String regex = "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(target);
return matcher.matches();
}
public static void main(String[] args) {
String str1 = "2020-01-01 12:00:00";
String str2 = "2020-01-01 12:00:0";
System.out.println(isMatched(str1));
System.out.println(isMatched(str2));
}
}
在上面的示例代码中,我们同样定义了一个名为isMatched的方法,用于判断字符串是否匹配日期时间格式。正则表达式^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$
的含义为:以四位数字开头,然后是一个连字符-
,接着两位数字,再以连字符-
作为分割,最后是两位数字,表示小时;接着是一个冒号:
,然后再接两位数字,表示分钟;最后再接冒号:
,然后是两位数字,表示秒数。同样利用Matcher类的matches方法判断匹配结果。
日期操作
除了日期格式化和正则表达式校验,Java中还可以使用Date类和Calendar类进行日期操作。以下是几个常见的日期操作示例:
将字符串转换成日期对象
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateDemo {
public static void main(String[] args) throws ParseException {
String str = "2020-01-01 12:00:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse(str);
System.out.println(date);
}
}
在上述代码中,我们通过SimpleDateFormat类将字符串转换成日期对象。
计算时间差
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateDemo {
public static void main(String[] args) {
Date start = new Date();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Date end = new Date();
long diff = end.getTime() - start.getTime();
System.out.println("时间差为:" + diff + "毫秒");
}
}
在上述代码中,我们通过Date类获取当前系统时间,并通过Thread.sleep方法模拟了一个5秒钟的时间差。
获取指定日期对应的一周中的星期几
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DateDemo {
public static void main(String[] args) {
String str = "2020-01-01";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
Date date = sdf.parse(str);
Calendar c = Calendar.getInstance();
c.setTime(date);
int dayOfWeek = c.get(Calendar.DAY_OF_WEEK) - 1;
System.out.println("星期" + dayOfWeek);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
在上述代码中,我们通过SimpleDateFormat类将字符串转换成日期对象,然后通过Calendar类获取对应日期的星期几。
结论
本文介绍了Java日期正则表达式的相关知识,包括日期格式化、日期格式校验、日期操作等。通过学习本文,您可以更加灵活地进行Java程序中的日期处理。