判断日期格式 JAVA

合集下载

Java时间日期处理技巧:日期格式化和时区设置

Java时间日期处理技巧:日期格式化和时区设置

Java时间日期处理技巧:日期格式化和时区设置在Java编程中,日期和时间处理是非常常见的任务。

无论是在开发Web应用程序、处理数据还是进行系统日志记录,都需要对日期和时间进行操作。

本文将介绍一些Java中常用的日期格式化和时区设置的技巧,帮助开发者更好地处理日期和时间。

1. 日期格式化日期格式化是将日期对象转换为特定格式的字符串表示。

Java提供了SimpleDateFormat类来实现日期格式化。

以下是一个简单的例子:```javaimport java.text.SimpleDateFormat;import java.util.Date;public class DateFormatExample {public static void main(String[] args) {Date date = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String formattedDate = sdf.format(date);System.out.println("Formatted Date: " + formattedDate);}}```在上面的例子中,我们使用了"yyyy-MM-dd HH:mm:ss"作为日期格式化的模式,它将日期格式化为"年-月-日时:分:秒"的形式。

Java的日期格式化模式有很多选项,可以根据需求进行调整。

例如,"yyyy-MM-dd"表示"年-月-日","HH:mm:ss"表示"时:分:秒","EEE"表示星期几等等。

更多的格式化选项可以参考Java官方文档。

2. 时区设置时区是指地球上划分的不同区域,每个时区都有自己的标准时间。

java对传入的中excel格式校验的方法

java对传入的中excel格式校验的方法

java对传入的中excel格式校验的方法【实用版5篇】目录(篇1)1.Java 对传入的中 Excel 格式校验的方法概述2.Java 中用于处理 Excel 格式校验的库介绍3.Java 中实现 Excel 格式校验的具体方法4.Java 中 Excel 格式校验的注意事项5.总结正文(篇1)一、Java 对传入的中 Excel 格式校验的方法概述在 Java 开发过程中,常常需要对用户上传的 Excel 文件进行格式校验,以确保数据的准确性和完整性。

对于这种情况,Java 提供了一些方法来对传入的中 Excel 格式进行校验。

本文将介绍这些方法,并给出具体的实现示例。

二、Java 中用于处理 Excel 格式校验的库介绍在 Java 中,有很多库可以用于处理 Excel 格式校验,其中比较常用的有 Apache POI 和 OpenCSV。

下面对这两个库进行简要介绍:1.Apache POIApache POI 是一个用于处理 Microsoft Office 文档的 Java 库,包括 Excel、Word 和 PowerPoint 等。

它提供了丰富的 API,可以方便地对 Excel 文件进行读取、写入和格式校验等操作。

2.OpenCSVOpenCSV 是一个纯 Java 编写的库,用于处理 CSV 和 Excel 文件。

它支持多种数据类型,包括字符、数字、日期和布尔值等。

同时,OpenCSV还提供了一些高级功能,如自动类型转换和内联注释等。

三、Java 中实现 Excel 格式校验的具体方法下面以 Apache POI 库为例,介绍如何在 Java 中实现 Excel 格式校验:1.首先,需要导入 Apache POI 库。

在 Maven 项目中,可以在pom.xml 文件中添加以下依赖:```xml<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.0.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.0.0</version></dependency>```2.创建一个方法,用于检查 Excel 文件是否符合预期格式:```javaimport ermodel.*;import ermodel.XSSFWorkbook;import java.io.FileInputStream;import java.io.IOException;import java.util.Iterator;public boolean checkExcelFormat(String filePath) throws IOException {FileInputStream fis = new FileInputStream(filePath);Workbook workbook = new XSSFWorkbook(fis);Sheet sheet = workbook.getSheetAt(0);Iterator<Row> rowIterator = sheet.iterator();while (rowIterator.hasNext()) {Row row = rowIterator.next();Iterator<Cell> cellIterator = row.cellIterator();while (cellIterator.hasNext()) {Cell cell = cellIterator.next();String cellValue = getCellValueAsString(cell);if (cellValue == null ||cellValue.trim().isEmpty()) {return false;}}}return true;}private String getCellValueAsString(Cell cell) {if (cell == null) {return null;}CellType cellType = cell.getCellType();switch (cellType) {case STRING:return cell.getStringCellValue();case NUMERIC:returnString.valueOf(cell.getNumericCellValue());case BOOLEAN:returnString.valueOf(cell.getBooleanCellValue());case FORMULA:return cell.getCellFormula();default:return null;}}```四、Java 中 Excel 格式校验的注意事项在进行 Excel 格式校验时,需要注意以下几点:1.检查文件是否为空或文件格式是否正确。

判断日期格式 ---JAVA

判断日期格式 ---JAVA

/*** 正则表达式验证日期格式* @param args*/public static void main(String[] args){String checkValue = "2007-02-29";//String eL ="^((((1[6-9]|[2-9]\\d)\\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\\d|3[01]))|(((1[6-9]|[2 -9]\\d)\\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\\d|30))|(((1[6-9]|[2-9]\\d)\\d{ 2})-0?2-(0?[1-9]|1\\d|2[0-8]))|(((1[6-9]|[2-9]\\d)(0[48]|[2468][048]|[13579][26])|((1 6|[2468][048]|[3579][26])00))-0?2-29-))(20|21|22|23|[0-1]?\\d):[0-5]?\\d:[0-5]?\\d$";String eL="^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\ \s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0 -9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([1 3579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][ 0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\ /\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))";Pattern p = pile(eL);Matcher m = p.matcher(checkValue);boolean b = m.matches();if(b){System.out.println("格式正确");}else{System.out.println("格式错误");}}}一、简单的日期判断(YYYY/MM/DD):Java代码^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$二、演化的日期判断(YYYY/MM/DD| YY/MM/DD):Java代码^(^(\d{4}|\d{2})(\-|\/|\.)\d{1,2}\3\d{1,2}$)|(^\d{4}年\d{1,2}月\d{1,2}日$)$^(^(\d{4}|\d{2})(\-|\/|\.)\d{1,2}\3\d{1,2}$)|(^\d{4}年\d{1,2}月\d{1,2}日$)$三、加入闰年的判断的:实例:Java代码^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\ d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0? [1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048] |[3579][26])00))-0?2-29-))$^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\ d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0? [1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048] |[3579][26])00))-0?2-29-))$分析:1、什么是合法的日期范围?对于不同的应用场景,这个问题有不同的解释。

JAVA格式化日期、时间的方法

JAVA格式化日期、时间的方法

JAVA格式化⽇期、时间的⽅法使⽤ DateFormat 格式化⽇期、时间DateFormat 也是⼀个抽象类,它也提供了如下⼏个类⽅法⽤于获取 DateFormat 对象。

getDateInstance():返回⼀个⽇期格式器,它格式化后的字符串只有⽇期,没有时间。

该⽅法可以传⼊多个参数,⽤于指定⽇期样式和 Locale 等参数;如果不指定这些参数,则使⽤默认参数。

getTimeInstance():返回⼀个时间格式器,它格式化后的字符串只有时间,没有⽇期。

该⽅法可以传⼊多个参数,⽤于指定时间样式和 Locale 等参数;如果不指定这些参数,则使⽤默认参数。

getDateTimeInstance():返回⼀个⽇期、时间格式器,它格式化后的字符串既有⽇期,也有时间。

该⽅法可以传⼊多个参数,⽤于指定⽇期样式、时间样式和 Locale 等参数;如果不指定这些参数,则使⽤默认参数。

上⾯三个⽅法可以指定⽇期样式、时间样式参数,它们是的4个静态常量:FULL、LONG、MEDIUM 和 SHORT,通过这4个样式参数可以控制⽣成的格式化字符串。

看如下例⼦程序。

import java.util.*;import java.text.*;import static java.text.DateFormat.*;public class DateFormatTest {public static void main(String[] args) throws ParseException {// 需要被格式化的时间Date dt = new Date();// 创建两个Locale,分别代表中国、美国Locale[] locales = { Locale.CHINA, };DateFormat[] df = new DateFormat[16];// 为上⾯两个Locale创建16个DateFormat对象for (int i = 0; i < locales.length; i++) {df[i * 8] = DateFormat.getDateInstance(SHORT, locales[i]);df[i * 8 + 1] = DateFormat.getDateInstance(MEDIUM, locales[i]);df[i * 8 + 2] = DateFormat.getDateInstance(LONG, locales[i]);df[i * 8 + 3] = DateFormat.getDateInstance(FULL, locales[i]);df[i * 8 + 4] = DateFormat.getTimeInstance(SHORT, locales[i]);df[i * 8 + 5] = DateFormat.getTimeInstance(MEDIUM, locales[i]);df[i * 8 + 6] = DateFormat.getTimeInstance(LONG, locales[i]);df[i * 8 + 7] = DateFormat.getTimeInstance(FULL, locales[i]);}for (int i = 0; i < locales.length; i++) {String tip = i == 0 ? "----中国⽇期格式----" : "----美国⽇期格式----";System.out.println(tip);System.out.println("SHORT格式的⽇期格式:" + df[i * 8].format(dt));System.out.println("MEDIUM格式的⽇期格式:" + df[i * 8 + 1].format(dt));System.out.println("LONG格式的⽇期格式:" + df[i * 8 + 2].format(dt));System.out.println("FULL格式的⽇期格式:" + df[i * 8 + 3].format(dt));System.out.println("SHORT格式的时间格式:" + df[i * 8 + 4].format(dt));System.out.println("MEDIUM格式的时间格式:" + df[i * 8 + 5].format(dt));System.out.println("LONG格式的时间格式:" + df[i * 8 + 6].format(dt));System.out.println("FULL格式的时间格式:" + df[i * 8 + 7].format(dt));}}}上⾯程序共创建了16个 DateFormat 对象,分别为中国、美国两个 Locale 各创建8个 DateFormat 对象,分别是 SHORT、MEDIUM、LONG、FULL 四种样式的⽇期格式器、时间格式器。

java美式时间格式,日期操作类(DateFormat与SimpleDateFormat)。。。

java美式时间格式,日期操作类(DateFormat与SimpleDateFormat)。。。

java美式时间格式,⽇期操作类(DateFormat与SimpleDateFormat)。

1.DateFormat类此类是⼀个⽇期的格式化类,专门格式化⽇期的操作,因为java.util.Date类本⾝就已经包含了完整的⽇期,所以只需要将些⽇期按照⼀些好的格式格式化⼀下显⽰就好了.观察DateFormat类的定义:此类是定义在java.test包中的。

public abstract class DateFormat extends Format但是定义上可以发现,此类是⼀个抽象类,按照以住的思路,直接使⽤其⼦类实例化即可,但是DateFormat 类本⾝的内部提供了可以直接为其实例化的操作。

得到⽇期的DateFormat对象:public static final DateFormat getDateInstance()得到⽇期时间的DateFormat对象:public static final DateFormat getDateTimeInstance()直接使⽤DateFormat类完成Date类的转换功能:public final String format(Date date)美式⽇期格式12345678910111213import java.text.DateFormat ;import java.util.Date ;public class DateDemo03{public static void main(String args[]){DateFormat df1 =null ;// 声明⼀个DateFormatDateFormat df2 =null ;// 声明⼀个DateFormatdf1 = DateFormat.getDateInstance() ;// 得到⽇期的DateFormat对象df2 = DateFormat.getDateTimeInstance() ;// 得到⽇期时间的DateFormat对象System.out.println("DATE:" + df1.format(new Date())) ;// 按照⽇期格式化System.out.println("DATETIME:" + df2.format(new Date())) ;// 按照⽇期时间格式化}};中式⽇期格式(通过Locale对象指定要显⽰的区域,指定的区域是中国)importjava.text.DateFormat ;importjava.util.Date ;importjava.util.Locale ;publicclassDateDemo04{publicstaticvoidmain(String args[]){DateFormat df1 = null;// 声明⼀个DateFormatDateFormat df2 = null;// 声明⼀个DateFormatdf1 = DateFormat.getDateInstance(DateFormat.YEAR_FIELD,newLocale("zh","CN")) ;// 得到⽇期的DateFormat对象df2 = DateFormat.getDateTimeInstance(DateFormat.YEAR_FIELD,DateFormat.ERA_FIELD,newLocale("zh","CN")) ;// 得到⽇期时间的DateFormat对象System.out.println("DATE:"+ df1.format(newDate())) ;// 按照⽇期格式化System.out.println("DATETIME:"+ df2.format(newDate())) ;// 按照⽇期时间格式化}}; 2.SimpleDateFormat类此类的功能是完成⽇期的显⽰格式化的,例如,在开发中,可以会将⼀种⽇期格式变为另外⼀种⽇期格式,如下所⽰:原始⽇期:2008-10-19 10:11:30.345转换捕⽇期:2008 年 10 ⽉ 19 ⽇ 10 点 11 分 30 秒 345 毫秒但是以上的两个⽇期中⽇期的数字是完全⼀样的,唯⼀不同的是⽇期的显⽰格式不同,所以要想实现这样的转换功能就必须依靠SimpleDateFormat类。

Java对日期Date类进行加减运算、年份加减月份加减、时间差等等

Java对日期Date类进行加减运算、年份加减月份加减、时间差等等

Java对⽇期Date类进⾏加减运算、年份加减⽉份加减、时间差等等实现代码⼀:import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;public class DateTestUtil {public static void main(String[] args) throws Exception {SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd");String str="20110823";Date dt=sdf.parse(str);Calendar rightNow = Calendar.getInstance();rightNow.setTime(dt);rightNow.add(Calendar.YEAR,-1);//⽇期减1年rightNow.add(Calendar.MONTH,3);//⽇期加3个⽉rightNow.add(Calendar.DAY_OF_YEAR,10);//⽇期加10天Date dt1=rightNow.getTime();String reStr = sdf.format(dt1);System.out.println(reStr);}}注:在Calendar对象的add⽅法中,第⼆个参数为正数表⽰“加”,负数表⽰“减”。

代码⼆: java date ⽇期加减天数测试类代码:import java.text.SimpleDateFormat;import java.util.Date;public class DateTest {public static void main(String[] arg){Date now = new Date();addAndSubtractDaysByGetTime(now,-5);addAndSubtractDaysByGetTime(now,5);addAndSubtractDaysByCalendar(now,-5);addAndSubtractDaysByCalendar(now,5);}public static Date addAndSubtractDaysByGetTime(Date dateTime/*待处理的⽇期*/,int n/*加减天数*/){//⽇期格式SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");SimpleDateFormat dd=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println(df.format(new Date(dateTime.getTime() + n * 24 * 60 * 60 * 1000L)));//System.out.println(dd.format(new Date(dateTime.getTime() + n * 24 * 60 * 60 * 1000L)));//注意这⾥⼀定要转换成Long类型,要不n超过25时会出现范围溢出,从⽽得不到想要的⽇期值return new Date(dateTime.getTime() + n * 24 * 60 * 60 * 1000L);}public static Date addAndSubtractDaysByCalendar(Date dateTime/*待处理的⽇期*/,int n/*加减天数*/){//⽇期格式SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");SimpleDateFormat dd=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");java.util.Calendar calstart = java.util.Calendar.getInstance();calstart.setTime(dateTime);calstart.add(java.util.Calendar.DAY_OF_WEEK, n);System.out.println(df.format(calstart.getTime()));//System.out.println(dd.format(calstart.getTime()));return calstart.getTime();}}运⾏结果:2014-10-062014-10-162014-10-062014-10-16代码三:在⽹上查阅资料,加上⾃⼰总结的⼀些关于Date类的⼯具类。

java中date的格式

java中date的格式

java中date的格式摘要:1.Java中Date类的介绍2.Date类的常用格式化方法3.实例演示正文:在Java编程中,Date类用于表示日期和时间。

它提供了许多方法来格式化和解析日期。

以下将介绍Date类的常用格式化方法,并通过实例进行演示。

一、Java中Date类的介绍Java中的Date类位于java.util包中,它代表了一个特定的日期和时间。

Date类的主要构造函数为:```javaDate(long date) // 传入long类型的毫秒数Date(Calendar calendar) // 传入一个Calendar对象```二、Date类的常用格式化方法1.使用SimpleDateFormat类SimpleDateFormat类是Date类的补充,它提供了丰富的格式化选项。

以下为一个示例:```javaSimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String formattedDate = sdf.format(date);```2.使用Date类的format()方法Date类也提供了一个format()方法,可以对日期进行格式化。

以下为一个示例:```javaDate currentDate = new Date();String formattedDate = currentDate.format("yyyy-MM-ddHH:mm:ss");```3.使用Java 8中的DateTimeFormatter类Java 8引入了新的日期和时间API,其中DateTimeFormatter类可以用于格式化日期。

以下为一个示例:```javaDateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");String formattedDate = dtf.format(LocalDate.now());```三、实例演示以下示例展示了如何使用Date类和SimpleDateFormat类对日期进行格式化:```javaimport java.text.SimpleDateFormat;import java.util.Date;public class Main {public static void main(String[] args) {// 获取当前日期Date currentDate = new Date();// 创建一个SimpleDateFormat对象SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 格式化日期String formattedDate = sdf.format(currentDate);// 输出格式化后的日期System.out.println(formattedDate);}}```运行上述代码,将输出当前日期,格式为“yyyy-MM-dd HH:mm:ss”。

java中Date与DateFormat的格式输出

java中Date与DateFormat的格式输出

java中Date与DateFormat的格式输出Java8中计算⽇期时间差Java8中计算⽇期时间差https:///hspingcc/article/details/73332526____________________________________________________________________________________________________________⼀.简述在Java8中,我们可以使⽤以下类来计算⽇期时间差异:1.Period2.Duration3.ChronoUnit⼆.Period类主要是Period类⽅法getYears(),getMonths()和getDays()来计算.1⽰例:package insping;import java.time.LocalDate;import java.time.Month;import java.time.Period;public class Test {public static void main(String[] args) {LocalDate today = LocalDate.now();System.out.println("Today : " + today);LocalDate birthDate = LocalDate.of(1993, Month.OCTOBER, 19);System.out.println("BirthDate : " + birthDate);Period p = Period.between(birthDate, today);System.out.printf("年龄 : %d 年 %d ⽉ %d ⽇", p.getYears(), p.getMonths(), p.getDays());}}结果:Today : 2017-06-16BirthDate : 1993-10-19年龄 : 23 年 7 ⽉ 28 ⽇三.Duration类提供了使⽤基于时间的值(如秒,纳秒)测量时间量的⽅法。

JAVA判断一个字符串是否是合法的日期格式?

JAVA判断一个字符串是否是合法的日期格式?
}
611053请尝试刷新页面或更换浏览器重试
JAVA判 断 一
采用SimpleDateFormat类的parse方法进行判断,如果转换不成功,就会出现异常。另外,还需要判断字符串的长度,若不判断,第二个字 符串就会验证通过,实际上也不是合法的。话不多说,且看代码:
public static void main(String[] args) { System.out.println(isValidDate("2020-12-12 14:30:20", null));//true System.out.println(isValidDate("19-12-12 14:30:20", null));//false System.out.println(isValidDate("2020/12/12 14:30:20", null));//false System.out.println(isValidDate("2020-12-12 14:30", null));//false
}
public static boolean isValidDate(String str, String format) { if (format == null) { format = "yyyy-MM-dd HH:mm:ss"; } boolean convertSuccess = true; // 指定日期格式 SimpleDateFormat sdf = new SimpleDateFormat(format); try { sdf.setLenient(false); sdf.parse(str); if (str.length() != format.length()) { convertSuccess = false; } } catch (ParseException e) { // 如果throw java.text.ParseException或者NullPointerException,就说明格式不对 convertSuccess = false; } return convertSuccess;

SimpleDateFormat验证时间格式是否正确

SimpleDateFormat验证时间格式是否正确

SimpleDateFormat验证时间格式是否正确刚到公司实习的时候,公司让在已有查询条件的基础上添加开始时间和结束时间的查询条件。

其中第⼀步要做的就是验证时间格式是否正确及开始时间是否先于结束时间。

所以这⾥把写的验证时间的代码粘贴出来,⽅便⾃⼰以后使⽤。

⼀.判断时间格式是否正确实现功能:验证时间格式是否为yyyy-MM-dd HH:mm:ss格式,其中,如果输⼊的时间只有年⽉⽇,且为开始时间,则在开始时间后添加这天的开头即00:00:00;如果是结束时间,则添加这天的末尾时间即23:59:59.java代码1private static Logger logger = Logger.getLogger(TimeUtils.class);2private static SimpleDateFormat format_ymd = new SimpleDateFormat("yyyy-MM-dd");// HH:mm:ss3private static SimpleDateFormat format_ymdhms_nospace = new SimpleDateFormat("yyyy-MM-ddHH:mm:ss");// HH:mm:ss4private static SimpleDateFormat format_ymdhms = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// HH:mm:ss5// ⽤于判断时间参数的正误6public static String reDefineDate(String datestring, boolean isStart) {7int strLen = datestring.length();8 Date date = null;9try {10switch (strLen) {11case 10:12if (isStart) {13 date = format_ymdhms.parse(datestring + " 00:00:00");14 } else {15 date = format_ymdhms.parse(datestring + " 23:59:59");16 }break;17case 18:18 date = format_ymdhms_nospace.parse(datestring);19break;20case 19:21 date = format_ymdhms.parse(datestring);22break;23default:24 ("未知时间转换长度");25break;26 }27 } catch (Exception e) {28 logger.error("时间转换出错 " + e.getMessage() + " \n" + datestring, e);29 }30if (date != null) {31return format_ymdhms.format(date);32 } else {33return StringUtils.EMPTY;34 }35 }⼆.判断开始时间是否先于结束时间在验证了时间格式正确后,如果开始时间和结束时间都存在,还要判断开始时间与结束时间的关系,只有开始时间先于结束时间,这俩个时间值才能被当做查询条件,否则,应返回开始时间晚于结束时间的消息,并设置查询失败,原因为参数错误。

java 年月日正则表达式

java 年月日正则表达式

java 年月日正则表达式
在Java中,可以使用正则表达式来验证日期格式。

以下是一个示例正则表达式,用于匹配年月日格式:
```java
String regex = "^(\\d{4})-(\\d{2})-(\\d{2})$";
```
这个正则表达式的含义是:
`^` 表示字符串的开头
`(\\d{4})` 表示匹配4位数字,即年份
`-` 表示匹配连字符
`(\\d{2})` 表示匹配2位数字,即月份
`-` 表示匹配连字符
`(\\d{2})` 表示匹配2位数字,即日期
`$` 表示字符串的结尾
你可以使用这个正则表达式来验证一个字符串是否符合年月日格式。

例如:
```java
String date = "";
String regex = "^(\\d{4})-(\\d{2})-(\\d{2})$";
boolean isValid = (regex);
```
在这个示例中,`isValid` 变量将为 `true` 如果 `date` 字符串符合年月日格式,否则为 `false`。

Java计算两时间相差日期,返回HH:mm小时分钟格式

Java计算两时间相差日期,返回HH:mm小时分钟格式

Java计算两时间相差⽇期,返回HH:mm⼩时分钟格式原理其实很简单,就是根据两个⽇期相差的天数,⼩时数,分钟数,秒数计算之后转换成HH:mm格式,废话不多说,直接上代码public static String timeSubtraction(String time1, String time2) throws ParseException {/***@description time2 是⼤的时间*@param [time1, time2]*@return ng.String*/SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//24⼩时制long newTime1 = simpleDateFormat.parse(time2).getTime();long newTime2 = simpleDateFormat.parse(time1).getTime();Long result = newTime1 - newTime2; //获取两时间相差的毫秒数long nd = 1000 * 24 * 60 * 60;long nh = 1000 * 60 * 60;long nm = 1000 * 60;long hour = result % nd / nh; //获取相差的⼩时数long min = result % nd % nh / nm; //获取相差的分钟数long day = result / nd;SimpleDateFormat formatter = new SimpleDateFormat("HH:mm");//初始化Formatter的转换格式。

long hMiles = hour * 3600000; //⼩时数转换成毫秒long mMiles = min * 60000; //分钟数转换成毫秒long resulMiles = (hMiles + mMiles); //下⾯这段很重要 ,计算之后设置时区,不然会差⼏⼩时formatter.setTimeZone(TimeZone.getTimeZone("GMT+00:00"));String resultFormat = formatter.format(resulMiles); //我这段是在⼀天内计算的如果⼤于⼀天就把下⾯的 day*24加到⼩时上就可以了return resultFormat + "," + day;}。

JavaScript校验日期格式

JavaScript校验日期格式

JavaScript校验⽇期格式⽹页中经常会有些输⼊框是要求输⼊⽇期格式的,如果输⼊的不是⽇期格式就需要提⽰⽤户重新输⼊,以下的JavaScript⽀持YYYY-MM-DD或者YYYYMMDD形式的⽇期输⼊,判断规则很简单,⾸先判断输⼊的位数是否在8~10之间,然后将输⼊的内容中的‘-’符号替换成为‘1’,对替换后的内容做判断看是否全部为数字,如果输⼊的内容中包含‘-’,则判断最后⼀次出现‘-’和第⼀次出现‘-’的位置之差是否为不⼤于3,因为两者之间是⽉份,⽽⽉份有可能输⼊⼀位或两位,所以两者之间的最⼤差值是3,然后分别从输⼊的字符串中获取年⽉⽇,再判断年份是否闰年来判断每个⽉的最后⼀天,看看输⼊的天数是否超过了每个⽉的最后⼀天,从⽽来判断输⼊的是否为⽇期,该判断灵活性差,假如⽤户提出YYYY/MM/DD形式⽇期的输⼊就得改代码,不如正则表达式来的⽅便,如果有更好的办法希望⼤家提出,我们共同进步!新建⼀个页⾯,页⾯中就有个输⼊框,该输⼊框中输⼊⽇期,在其onblur事件中调⽤⽇期格式判断⽅法。

<form name=fm><input type=text name=StartStatDate class=input description="统计期间开始⽇期"onblur="checkDateFormate(this);"/></form>//判断输⼊的内容是否为⽇期格式function checkDateFormate(Field) {var inputDateValue = Field.value;var desc = Field.description;if(inputDateValue == null || inputDateValue == '') {return false;}//获取输⼊字符串的长度var inputValueLength = inputDateValue.length;//如果满⾜下⾯判断的所有条件才算合法的⽇期,否则不合法if(checkNumeric(inputDateValue) && checkLegth(inputValueLength) && checkSpecialChar(inputDateValue) ) {return true;}else {errorMessage("请输⼊合法的" + desc +"\n类型为⽇期,格式为YYYY-MM-DD 或者YYYYMMDD");Field.focus();return false;}}//⽇期只能是8~10位function checkLegth(length) {if(length < 8 || length > 10) {return false;}return true;}//如果输⼊的内容中包含‘-’,则按照‘-’分割来去年⽉⽇,否则直接按照位数取function checkSpecialChar(inputDateValue) {var index = inputDateValue.indexOf('-');var year = 0;var month = 0;var day = 0;if(index > -1) {var lastIndex = stIndexOf('-');//只能是YYYY-M-DD或者YYYY-MM-DD的形式if(lastIndex - index < 1 || lastIndex - index > 3) {return false;}var arrDate = inputDateValue.split('-');year = arrDate[0];month = arrDate[1];day = arrDate[2];} else {year = inputDateValue.substring(0,4);month = inputDateValue.substring(4,6);day = inputDateValue.substring(6,8);}if(Number(month) > 12 || Number(day) > 31 ||Number(month)<1|| Number(day)<1 || year.length != 4) {return false;} else if(day > getLastDayOfMonth(Number(year),Number(month))) { return false;}return true;}//判断输⼊的内容将‘-’替换成为数字1后,是否全部为数字function checkNumeric(inputDateValue) {var replacedValue = inputDateValue.replace(/-/g,'1');return isNumeric(replacedValue);}//判断是否为数字function isNumeric(strValue){var result = regExpTest(strValue,/\d*[.]?\d*/g);return result;}function regExpTest(source,re){var result = false;if(source==null || source=="")return false;if(source==re.exec(source))result = true;return result;}//获得⼀个⽉中的最后⼀天function getLastDayOfMonth(year,month){var days=0;switch(month){case 1: case 3: case 5: case 7: case 8: case 10: case 12: days=31;break; case 4: case 6: case 9: case 11: days=30;break;case 2: if(isLeapYear(year)) days=29;else days=28;break;}return days;}//判断是否为闰年function isLeapYear(year){if((year %4==0 && year %100!=0) || (year %400==0)) return true;else return false;}。

java dateformat用法

java dateformat用法

java dateformat用法DateFormat类用于格式化日期和时间,它可以将一个Date对象格式化为日期/时间字符串。

DateFormat是抽象类,无法直接实例化,但可以使用它提供的子类SimpleDateFormat来实例化得到DateFormat对象,然后用这个实例来格式化日期和时间。

SimpleDateFormat类在实例化时可以接收一个模式字符串作为参数,用来指定自己的日期和时间格式,这其中主要表示长度和月份的格式化字符串如下:G:符号表示时代标志,如公元y:表示一年中的年份M:表示一个月,在M之前可以跟数字来表示M表示的长度h:表示一小时中的小时数m:表示一分钟中的分钟数z:表示时区例如,“yyyy-MM-dd”就表示4位年,2位月,2位日;“yyyy-MM-dd hh:mm:ss”就表示4位年,2位月,2位日,2位小时,2位分钟,2位秒。

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");String dateStr = sdf.format(new Date());System.out.println(dateStr);该程序的运行结果为:2018-05-17DateFormat的parse()方法也接收一个日期字符串作为参数,返回一个Date对象,用它可以把一个字符串解析成日期对象,例如下面程序:该程序的运行结果可以是Wed May 16 00:00:00 CST 2018或其他日期字符串。

SimpleDateFormat还提供了一些常用的日期格式,如:SHORT:短格式,如“M/d/yy”MEDIUM:中等格式,如“MMM d, yyyy”LONG:长格式,如“MMMM d, yyyy”FULL:全格式,如“EEEE, MMMM d, yyyy”它们的用法是:DateFormat格式化日期和时间时,还可以使用其静态方法来构造DateFormat对象:getDateTimeInstance() 可以接收两个整形参数,前者是日期样式(DateFormat常量),后者是时间样式,例如下面的程序可以打印出格式为“5 月 16 日下午 8 时 21 分 11 秒”的日期字符串:还可以使用Calendar类来强制指定日期,例如下面的程序打印出的日期字符串是“2018 年 5 月 17 日星期四上午 8 时 48 分 28 秒”:。

java通过身份证号码获取出生日期、性别、年龄

java通过身份证号码获取出生日期、性别、年龄

java通过⾝份证号码获取出⽣⽇期、性别、年龄⼯具类1/*** Created by Administrator on 2016/2/25.*/public class IdCard {/** 中国公民⾝份证号码最⼩长度。

*/public final int CHINA_ID_MIN_LENGTH = 15;/** 中国公民⾝份证号码最⼤长度。

*/public final int CHINA_ID_MAX_LENGTH = 18;/*** 根据⾝份编号获取年龄** @param idCard* ⾝份编号* @return年龄*/public static int getAgeByIdCard(String idCard) {int iAge = 0;Calendar cal = Calendar.getInstance();String year = idCard.substring(6, 10);int iCurrYear = cal.get(Calendar.YEAR);iAge = iCurrYear - Integer.valueOf(year);return iAge;}/*** 根据⾝份编号获取⽣⽇** @param idCard ⾝份编号* @return⽣⽇(yyyyMMdd)*/public static String getBirthByIdCard(String idCard) {return idCard.substring(6, 14);}/*** 根据⾝份编号获取⽣⽇年** @param idCard ⾝份编号* @return⽣⽇(yyyy)*/public static Short getYearByIdCard(String idCard) {return Short.valueOf(idCard.substring(6, 10));}/*** 根据⾝份编号获取⽣⽇⽉** @param idCard* ⾝份编号* @return⽣⽇(MM)*/public static Short getMonthByIdCard(String idCard) {return Short.valueOf(idCard.substring(10, 12));}/*** 根据⾝份编号获取⽣⽇天** @param idCard* ⾝份编号* @return⽣⽇(dd)*/public static Short getDateByIdCard(String idCard) {return Short.valueOf(idCard.substring(12, 14));}/*** 根据⾝份编号获取性别** @param idCard ⾝份编号* @return性别(M-男,F-⼥,N-未知)*/public static String getGenderByIdCard(String idCard) {String sGender = "未知";String sCardNum = idCard.substring(16, 17);if (Integer.parseInt(sCardNum) % 2 != 0) {sGender = "1";//男} else {sGender = "2";//⼥}return sGender;}//修改年龄的⽅法/* @RequestMapping(value = "shebaoshuju",method = RequestMethod.GET)public String shebaoshuju(){List<Wcbxx> list= wcbxxservice.all();int cou=0;for(Wcbxx w:list){if(w.getIdcard()!=null && w.getIdcard().length()>17) {String sex = IdCard.getGenderByIdCard(w.getIdcard());int age = IdCard.getAgeByIdCard(w.getIdcard());w.setAge(Long.valueOf(age));w.setSex(sex);int a = wcbxxservice.updatess(w);if (a>0) {System.out.println("姓名" + w.getRname() + "⾝份证" + w.getIdcard() + "年龄:" + age + "性别:" + sex); }}cou++;System.out.println(cou);}return "";}*/@Testpublic static void main(String [] a){String idcard="460200************";String sex= getGenderByIdCard(idcard);System.out.println("性别:" + sex);int age= getAgeByIdCard(idcard);System.out.println("年龄:" + age);Short nian=getYearByIdCard(idcard);Short yue=getMonthByIdCard(idcard);Short ri=getDateByIdCard(idcard);System.out.print(nian+"年"+yue+"⽉"+ri+"⽇");String sr=getBirthByIdCard(idcard);System.out.println("⽣⽇:" + sr);}}⼯具类2/*** 通过⾝份证号码获取出⽣⽇期、性别、年龄* @param certificateNo* @return返回的出⽣⽇期格式:1990-01-01 性别格式:F-⼥,M-男*/public static Map<String, String> getBirAgeSex(String certificateNo) {String birthday = "";String age = "";String sexCode = "";int year = Calendar.getInstance().get(Calendar.YEAR);char[] number = certificateNo.toCharArray();boolean flag = true;if (number.length == 15) {for (int x = 0; x < number.length; x++) {if (!flag)return new HashMap<String, String>();flag = Character.isDigit(number[x]);}} else if (number.length == 18) {for (int x = 0; x < number.length - 1; x++) {if (!flag)return new HashMap<String, String>();flag = Character.isDigit(number[x]);}}if (flag && certificateNo.length() == 15) {birthday = "19" + certificateNo.substring(6, 8) + "-" + certificateNo.substring(8, 10) + "-"+ certificateNo.substring(10, 12);sexCode = Integer.parseInt(certificateNo.substring(certificateNo.length() - 3, certificateNo.length()))% 2 == 0 ? "F" : "M";age = (year - Integer.parseInt("19" + certificateNo.substring(6, 8))) + "";} else if (flag && certificateNo.length() == 18) {birthday = certificateNo.substring(6, 10) + "-" + certificateNo.substring(10, 12) + "-"+ certificateNo.substring(12, 14);sexCode = Integer.parseInt(certificateNo.substring(certificateNo.length() - 4, certificateNo.length() - 1)) % 2 == 0 ? "F" : "M";age = (year - Integer.parseInt(certificateNo.substring(6, 10))) + "";}Map<String, String> map = new HashMap<String, String>();map.put("birthday", birthday);map.put("age", age);map.put("sexCode", sexCode);return map;}。

java时间格式大全

java时间格式大全

/** *//**
* 得到现在小时
*/
public static String getHour() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
kk = st1.split(":");
jj = st2.split(":");
if (Integer.parseInt(kk[0]) < Integer.parseInt(jj[0]))
return "0";
else {
double y = Double.parseDouble(kk[0]) + Double.parseDouble(kk[1]) / 60;
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(dateDate);
return dateString;
}
* @return
*/
public static String getTime() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

正则判断日期格式

正则判断日期格式

正则判断日期格式
1、正则表达式判断日期格式
日期是一种显示日期和时间的方式,通常可以有不同的格式,比
如“28/02/2018”或者“19-7-18”这种形式。

想要编写匹配这种格式
日期的正则表达式就需要熟悉一些日期所用到的全局变量,比如“年”、“月”、“日”及时间单位。

正则表达式匹配一个日期格式最简单的方式是使用Unicode控制
字符类`\p{Nd}`,这个字符类会匹配一到九之间的数字,然后根据预
定义的全局变量进行比较,以确定匹配的日期格式是什么。

例如,下
面的正则表达式可以匹配类似“2018年3月24日”的格式:`\d{4}年\d{1,2}月\d{1,2}日`。

另一种可以使用的方式是采用常见的日期格式符号来匹配,比如“/”或“-”。

通过对固定格式的日期进行比较,就可以确定哪种格式。

例如,如果想要匹配“2018/03/24”这种格式,就可以使用
`\d{4}/\d{2}/\d{2}`,同时还可以大小写或多个符号。

此外,日期格式也可以使用时间段来表示,比如“9月1日9:05”这样的格式,就可以利用`\d{1,2}月\d{1,2}日\s\d{1,2}:\d{2}`来
匹配。

另外,正则表达式还可以帮助我们进行有限的日历比较,比如
“本月的今日”或“下月的今日”这种形式。

最后,正则表达式还可以用来验证日期的有效性,比如年份是否正确、月份是否存在(2月有28/29天)、是否是未来日期,这些都可以通过正则表达式实现。

总而言之,正则表达式与日期格式的匹配是一个灵活性较强的工具,使用它可以简便有效地验证日期格式,也可以用它来比较日期,以确定所需结果。

Java里日期转换及日期比较大小

Java里日期转换及日期比较大小

Java⾥⽇期转换及⽇期⽐较⼤⼩1、⽐较⽇期的⼤⼩:DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//创建⽇期转换对象hh:mm:ss为时分秒,年⽉⽇为yyyy-MM-ddDate dt1 = df.parse("2017-11-13 15:00:00");//将字符串转换为date类型Date dt2 = df.parse("2017-11-13 17:00:00");if(dt1.getTime()>dt2.getTime()){……}//⽐较时间⼤⼩:如果dt1⼤于dt2 注意:字符串这⾥需要parse转⼀下⽇期类型,否则没有getTime()。

⼀种:DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");java.util.Date dateBegin=df.parse(ruleStatus.getExecuteTime());java.util.Date dateEnd=df.parse(tempRuleStatus.getExecuteTime());if(dateBegin.getTime() > dateEnd.getTime()){}⼆种:DateFormat df = new SimpleDateFormat("yyyy-MM-dd");String dateBegin=df.format(df.parse(ruleStatus.getExecuteTime()));String dateEnd=df.format(df.parse(tempRuleStatus.getExecuteTime()));if(Date.valueOf(dateBegin).getTime() > Date.valueOf(dateEnd).getTime()){}注意:⽐较⽇期⼤⼩的时候需要注意12⼩时制和24⼩时制的区分(最好⽤24⼩时制)//24⼩时制DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//12⼩时制DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");new Date("2017-11-15 11:34:14").getTime()//1510716854000new Date("2017-11-15 12:08:12").getTime()//1510718892000new Date("2017-11-15 00:08:12").getTime()//1510675692000 如果是12⼩时制,那么"2017-11-15 12:08:12"是按"2017-11-15 00:08:12"计算getTime(),所以会⽐"2017-11-15 11:34:14"⼩,这点就容易引起问题,需要注意。

java rfc3339标准格式

java rfc3339标准格式

Java RFC3339标准格式是指Java语言中对RFC3339时间格式的支持和应用。

RFC3339是一种日期和时间的标准格式,其格式为"YYYY-MM-DDThh:mm:ss.sTZD",其中YYYY表示年份,MM表示月份,DD表示日期,hh表示小时,mm表示分钟,ss.s表示秒和毫秒,TZD表示时区。

该格式旨在统一日期和时间的表示方式,使得不同系统之间可以更加方便地进行时间信息的交换和解析。

在Java中,RFC3339格式的时间可以通过java.time包中的DateTimeFormatter类进行解析和格式化。

使用DateTimeFormatter类,我们可以将RFC3339格式的时间字符串转换为Java的LocalDateTime对象,也可以将LocalDateTime对象格式化为RFC3339格式的时间字符串。

下面,我们将介绍一些在Java 中使用RFC3339格式的时间的常见操作。

1. 解析RFC3339格式的时间字符串在Java中,我们可以通过DateTimeFormatter类的ofPattern方法来创建一个解析RFC3339格式时间的DateTimeFormatter对象,然后使用该对象的parse方法将RFC3339格式的时间字符串转换为LocalDateTime对象。

代码示例如下:```javaString rfc3339TimeStr = "2022-02-28T08:30:00.123+08:00"; DateTimeFormatter formatter =DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");LocalDateTime dateTime = LocalDateTime.parse(rfc3339TimeStr, formatter);```在这个例子中,我们首先创建了一个RFC3339格式的时间字符串,然后使用DateTimeFormatter.ofPattern方法创建了一个带有RFC3339格式的DateTimeFormatter对象,最后调用parse方法将RFC3339格式的时间字符串转换为LocalDateTime对象。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3、月份为 2,考虑平年情况,匹配 MM-DD 的正则表达式为:
Java 代码 02-(0[1-9]|[1][0-9]|2[0-8]) 02-(0[1-9]|[1][0-9]|2[0-8])
根据上面的成果,我们可以得到匹配平年日期格式为 YYYY-MM-DD 的正则表达 式:
Java 代码 ([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[ 02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9] |2[0-8]))) ([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[ 02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9] |2[0-8])))
Pattern p = pile(eL); Matcher m = p.matcher(checkValue); boolean b = m.matches(); if(b) {
System.out.println("格式正确"); } else {
System.out.println("格式错误"); }
Java 代码 (0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]) (0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]) 2、月份为 4, 6, 9, 11,天数范围为 01-30,匹配 MM-DD 的正则表达式为:
Java 代码 (0[469]|11)-(0[1-9]|[12][0-9]|30) (0[469]|11)-(0[1-9]|[12][0-9]|30)
2.最强验证日期的正则表达式,添加了闰年的验证
这个日期正则表达式支持
YYYY-MM-DD
YYYY/MM/DD
YYYY_MM_DD
YYYY.MM.DD 的形式
match : 2008-2-29 2008/02/29
not match : 2008-2-30 2007-2-29
完整的正则表达式如下:
Java 代码 ((^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(10|12|0?[13578])([-\/\._])(3[01]|[12][0-9]|0?[ 1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(11|0?[469])([-\/\._])(30|[12][0-9]|0?[1 -9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(0?2)([-\/\._])(2[0-8]|1[0-9]|0?[1-9])$)|( ^([2468][048]00)([-\/\._])(0?2)([-\/\._])(29)$)|(^([3579][26]00)([-\/\._])(0?2)([-\/\._] )(29)$)|(^([1][89][0][48])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][0][48])([-\/\._])( 0?2)([-\/\._])(29)$)|(^([1][89][2468][048])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9] [2468][048])([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][13579][26])([-\/\._])(0?2)([-\/\. _])(29)$)|(^([2-9][0-9][13579][26])([-\/\._])(0?2)([-\/\._])(29)$)) ((^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(10|12|0?[13578])([-\/\._])(3[01]|[12][0-9]|0?[ 1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(11|0?[469])([-\/\._])(30|[12][0-9]|0?[1 -9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(0?2)([-\/\._])(2[0-8]|1[0-9]|0?[1-9])$)|( ^([2468][048]00)([-\/\._])(0?2)([-\/\._])(29)$)|(^([3579][26]00)([-\/\._])(0?2)([-\/\._] )(29)$)|(^([1][89][0][48])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][0][48])([-\/\._])( 0?2)([-\/\._])(29)$)|(^([1][89][2468][048])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9] [2468][048])([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][13579][26])([-\/\._])(0?2)([-\/\. _])(29)$)|(^([2-9][0-9][13579][26])([-\/\._])(0?2)([-\/\._])(29)$))
2、关于闰年的阐释。
关于公历闰年是这样规定的:地球绕太阳公转一周叫做一回归年,一回归年 长 365 日 5 时 48 分 46 秒。因此,公历规定有平年和闰年,平年一年有 365 日,比 回归年短 0.2422 日,四年共短 0.9688 日,故每四年增加一日,这一年有 366 日,就 是闰年。但四年增加一日比四个回归年又多 0.0312 日,400 年后将多 3.12 日,故在 400 年中少设 3 个闰年,也就是在 400 年中只设 97 个闰年,这样公历年的平均长度 与回归年就相近似了。由此规定:年份是整百数的必须是 400 的倍数才是闰年,例 如 1900 年、2100 年就不是闰年。
/** * 正则表达式验证日期格式 * @param args */
public static void main(String[] args) { String checkValue = "2007-02-29"; //String eL =
"^((((1[6-9]|[2-9]\ \ d)\ \ d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\ \ d|3[01]))|(((1[6-9]|[ 2-9]\ \ d)\ \ d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\ \ d|30))|(((1[6-9]|[2-9]\ \ d)\ \ d{2})-0?2-(0?[1-9]|1\ \ d|2[0-8]))|(((1[6-9]|[2-9]\ \ d)(0[48]|[2468][048]|[13579][26] )|((16|[2468][048]|[3579][26])00))-0?2-29-)) (20|21|22|23|[0-1]?\ \ d):[0-5]?\ \ d:[0-5]?\ \ d$";
分析:
1、什么是合法的日期范围?对于不同的应用场景,这个问题有不同的解释。这里 采纳 MSDN 中的约定:
DateTime 值类型表示值范围在公元(基督纪元)0001 年 1 月 1 日午夜 12:00:00 到公元 (C.E.) 9999 年 12 月 31 日晚上 11:59:59 之间的日期和时间。
}
}
一、简单的日期判断(YYYY/MM/DD):
Java 代码 ^\ d{4}(\ -|\ /|\ .)\ d{1,2}\ 1\ d{1,2}$ ^\ d{4}(\ -|\ /|\ .)\ d{1,2}\ 1\ d{1,2}$
二、演化的日期判断(YYYY/MM/DD| YY/MM/DD):
Java 代码 ^(^(\ d{4}|\ d{2})(\ -|\ /|\ .)\ d{1,2}\ 3\ d{1,2}$)|(^\ d{4}年\ d{1,2}月\ d{1,2}日$)$ ^(^(\ d{4}|\ d{2})(\ -|\ /|\ .)\ d{1,2}\ 3\ d{1,2}$)|(^\ d{4}年\ d{1,2}月\ d{1,2}日$)$
其中 [0-9] 也可以表示为 \d,但 \d 不如 [0-9] 直观,因此下面我将一直采用 [0-9]
用正则表达式验证日期的难点有二:一是大小月份的天数不同,二是闰年的考虑。
对于第一个难点,我们首先不考虑闰年,假设 2 月份都是 28 天,这样,月份和日期 可以分成三种情况:
1、月份为 1, 3, 5, 7, 8, 10, 12,天数范围为 01 - 31,匹配 MM-DD 的正则表达式为:
String eL= "^((\ \ d{2}(([02468][048])|([13579][26]))[\ \ -\ \ /\ \ s]?((((0?[13578])|(1[02]))[\ \ -\ \ /\ \ s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\ \ -\ \ /\ \ s]?((0?[1-9])|([12][0-9])|(30)))|(0?2[\ \ -\ \ /\ \ s]?((0?[1-9])|([1-2][0-9])))))|(\ \ d{2}(([02468][123567 9])|([13579][01345789]))[\ \ -\ \ /\ \ s]?((((0?[13578])|(1[02]))[\ \ -\ \ /\ \ s]?((0?[1-9] )|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\ \ -\ \ /\ \ s]?((0?[1-9])|([1-2][0-9])|(30)))|(0? 2[\ \ -\ \ /\ \ s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))";
相关文档
最新文档