Java 以 yyyyMMddHHmmss 格式验证日期
Java validate date in yyyyMMddHHmmss
我想在 java 中将给定的日期格式验证为 yyyyMMddHHmmss。
条件:
应该满足格式yyyyMMddHHmmss。
它应该验证当前日期。
它应该验证可以与当前小时相差 +3 小时或 -3 小时的小时数。
如果满足所有三个条件,Java 方法应该 return 为真。
我当前的代码只验证 yyyyMMddHHmmss 格式。
我当前的代码
public class SO31132861 {
public static void main(String[] args) {
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
df.setLenient(false);
System.out.println(tryParse(df, "20160630231110"));
System.out.println(tryParse(df, "20150228231100"));
System.out.println(tryParse(df, "20160229231100"));
System.out.println(tryParse(df, "21000229231100")); // 29th Feb on non-leap year 2100
System.out.println(tryParse(df, "20160631231110")); // 31st Jun invalid day
System.out.println(tryParse(df, "20160229231160")); // Second > 59
System.out.println(tryParse(df, "20150229231100")); // 29th Feb on non-leap year 2015
System.out.println(tryParse(df, "20150228241100")); // Hour > 23
}
private static Boolean tryParse(DateFormat df, String s) {
Boolean valid=false;
try {
Date d= df.parse(s);
valid=true;
} catch (ParseException e) {
valid=false;
}
return valid;
}
}
使用另外两个日期,分别提前三个小时和晚三个小时,进行比较。然后使用 compareTo()
.
确保您正在解析的日期在这两个边界之间
你真的不应该在你的 class 名字中加入数字,但这是一个与答案无关的风格问题。
public class SO31132861 {
public static void main(String[] args) {
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
df.setLenient(false);
System.out.println(tryParse(df, "20160630231110"));
System.out.println(tryParse(df, "20150228231100"));
System.out.println(tryParse(df, "20160229231100"));
System.out.println(tryParse(df, "21000229231100")); // 29th Feb on non-leap year 2100
System.out.println(tryParse(df, "20160631231110")); // 31st Jun invalid day
System.out.println(tryParse(df, "20160229231160")); // Second > 59
System.out.println(tryParse(df, "20150229231100")); // 29th Feb on non-leap year 2015
System.out.println(tryParse(df, "20150228241100")); // Hour > 23
}
private static Boolean tryParse(DateFormat df, String s) {
Boolean valid=false;
try {
Date threeHoursBefore = new Date();
threeHoursBefore.setTime(System.currentTimeMillis() - (3*60*60*1000));
Date threeHoursAfter = new Date();
threeHoursAfter.setTime(System.currentTimeMillis() + (3*60*60*1000));
Date dateToParse= df.parse(s);
valid=dateToParse.compareTo(threeHoursBefore) > 0 && dateToParse.compareTo(threeHoursAfter) < 0;
} catch (ParseException e) {
valid=false;
}
return valid;
}
}
我想在 java 中将给定的日期格式验证为 yyyyMMddHHmmss。
条件:
应该满足格式yyyyMMddHHmmss。
它应该验证当前日期。
它应该验证可以与当前小时相差 +3 小时或 -3 小时的小时数。
如果满足所有三个条件,Java 方法应该 return 为真。
我当前的代码只验证 yyyyMMddHHmmss 格式。
我当前的代码
public class SO31132861 {
public static void main(String[] args) {
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
df.setLenient(false);
System.out.println(tryParse(df, "20160630231110"));
System.out.println(tryParse(df, "20150228231100"));
System.out.println(tryParse(df, "20160229231100"));
System.out.println(tryParse(df, "21000229231100")); // 29th Feb on non-leap year 2100
System.out.println(tryParse(df, "20160631231110")); // 31st Jun invalid day
System.out.println(tryParse(df, "20160229231160")); // Second > 59
System.out.println(tryParse(df, "20150229231100")); // 29th Feb on non-leap year 2015
System.out.println(tryParse(df, "20150228241100")); // Hour > 23
}
private static Boolean tryParse(DateFormat df, String s) {
Boolean valid=false;
try {
Date d= df.parse(s);
valid=true;
} catch (ParseException e) {
valid=false;
}
return valid;
}
}
使用另外两个日期,分别提前三个小时和晚三个小时,进行比较。然后使用 compareTo()
.
你真的不应该在你的 class 名字中加入数字,但这是一个与答案无关的风格问题。
public class SO31132861 {
public static void main(String[] args) {
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
df.setLenient(false);
System.out.println(tryParse(df, "20160630231110"));
System.out.println(tryParse(df, "20150228231100"));
System.out.println(tryParse(df, "20160229231100"));
System.out.println(tryParse(df, "21000229231100")); // 29th Feb on non-leap year 2100
System.out.println(tryParse(df, "20160631231110")); // 31st Jun invalid day
System.out.println(tryParse(df, "20160229231160")); // Second > 59
System.out.println(tryParse(df, "20150229231100")); // 29th Feb on non-leap year 2015
System.out.println(tryParse(df, "20150228241100")); // Hour > 23
}
private static Boolean tryParse(DateFormat df, String s) {
Boolean valid=false;
try {
Date threeHoursBefore = new Date();
threeHoursBefore.setTime(System.currentTimeMillis() - (3*60*60*1000));
Date threeHoursAfter = new Date();
threeHoursAfter.setTime(System.currentTimeMillis() + (3*60*60*1000));
Date dateToParse= df.parse(s);
valid=dateToParse.compareTo(threeHoursBefore) > 0 && dateToParse.compareTo(threeHoursAfter) < 0;
} catch (ParseException e) {
valid=false;
}
return valid;
}
}