如何将日期格式MM/YYYY
验证为字符串
例子-
09/20错误
13/5651错误
3/2104是
2010年3月3日正确
答案 0 :(得分:2)
使用YearMonth
类。
DateTimeFormatter f = DateTimeFormatter.ofPattern( "M/uuuu" ) ;
YearMonth ym = YearMonth.parse( "3/2018" , f ) ;
诱捕DateTimeParseException
以检测到无效输入。
提示:使用标准的ISO 8601格式将日期时间值交换为文本。对于年月:YYYY-MM
java.time 类默认使用这些标准格式。
YearMonth.parse( "2018-03" )
java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和SimpleDateFormat
。
目前位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310。
您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*
类。
在哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展了java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。您可能会在这里找到一些有用的类,例如Interval
,YearWeek
,YearQuarter
和more。
答案 1 :(得分:0)
您想要的是一种自定义方法,因为您对日期的有效性设置了特殊的约束。
以下通过了您的所有4个示例:
public static boolean validDate(String date) {
date = date.trim();
if (date.length() < 6)
return false;
String[] parts = date.split("/");
if (parts.length != 2)
return false;
int month = 0;
try {
month = Integer.parseInt(parts[0]);
} catch (NumberFormatException e) {
e.printStackTrace();
return false;
}
if (month < 1 || month > 12)
return false;
int year = 0;
try {
year = Integer.parseInt(parts[1]);
} catch (NumberFormatException e) {
e.printStackTrace();
return false;
}
if (year < 1000)
return false;
return true;
}
public static void main(String[] args) {
String s1 = "09/20";
String s2 = "13/5651";
String s3 = "3/2104";
String s4 = "03/2010";
System.out.println(s1 + " " + validDate(s1));
System.out.println(s2 + " " + validDate(s2));
System.out.println(s3 + " " + validDate(s3));
System.out.println(s4 + " " + validDate(s4));
}
将打印:
09/20 false
13/5651 false
3/2104 true
03/2010 true
我不确定这部分内容:
if (year < 1000)
return false;
如果愿意,可以更改它。
答案 2 :(得分:0)
尝试此函数,如果日期有效,则返回true,否则返回false:
static boolean validateDate(String date){
String [] split_date = date.split("/");
//update year bounds accordingly
int min_year = 1900;
int max_year = 2200;
try{
int month = Integer.parseInt(split_date[0]);
int year = Integer.parseInt(split_date[1]);
if (month < 1 || month > 12){
return false;
}
if (year < min_year || year > max_year){
return false;
}
} catch (NumberFormatException e) {
return false;
}
return true;
}
或使用此函数来验证将来的日期:
import java.util.Calendar;
static boolean validateDate(String date){
String [] split_date = date.split("/");
int curr_month = Calendar.getInstance().get(Calendar.MONTH);
int curr_year = Calendar.getInstance().get(Calendar.YEAR);
try{
int month = Integer.parseInt(split_date[0]);
int year = Integer.parseInt(split_date[1]);
if (year < curr_year){
return false;
}
if (month < 1 || month > 12){
return false;
}
if (year == curr_year){
if (month <= curr_month){
return false;
}
}
} catch (NumberFormatException e) {
return false;
}
return true;
}
答案 3 :(得分:0)
public boolean isThisDateValid(String dateToValidate, String dateFromat){
if(dateToValidate == null){
return false;
}
SimpleDateFormat sdf = new SimpleDateFormat(dateFromat);
sdf.setLenient(false);
try {
//if not valid, it will throw ParseException
Date date = sdf.parse(dateToValidate);
System.out.println(date);
} catch (ParseException e) {
e.printStackTrace();
return false;
}
return true;
}
Referensi https://www.mkyong.com/java/how-to-check-if-date-is-valid-in-java/