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程序中的日期处理。