Java 如何验证字符串是否为YYYYMMDD格式?
我有一个字符串,它以Java 如何验证字符串是否为YYYYMMDD格式?,java,string,date,Java,String,Date,我有一个字符串,它以YYYYMMDD- public static void verifyInput(String input) { } 此处传递的输入将采用“YYYYMMDD”形式 如何验证此表单中传递的input字符串是否仅YYYYMMDD 我只需要验证它是否为YYYYMMDD此格式。。我不需要以这种YYYYMMDD格式获取当前日期,然后将其与ss进行比较 更新:- 我只需要验证字符串输入,看看它们是否为这种格式YYYYMMDD 这意味着,如果有人正在传递字符串hello,则该
YYYYMMDD
-
public static void verifyInput(String input) {
}
此处传递的输入将采用“YYYYMMDD”形式
如何验证此表单中传递的input
字符串是否仅YYYYMMDD
我只需要验证它是否为YYYYMMDD
此格式。。我不需要以这种YYYYMMDD
格式获取当前日期,然后将其与ss
进行比较
更新:-
我只需要验证字符串输入,看看它们是否为这种格式YYYYMMDD
这意味着,如果有人正在传递字符串hello
,则该字符串不是此YYYYMMDD
格式
如果有人正在传递此字符串
20130130
,则会按照此YYYYMMDD
格式验证此字符串。将其传递到格式字符串YYYYMMDD的SimpleDataFormat对象。将字符串转换为日期:
SimpleDateFormat sdf = new SimpleDateFormat("YYYYMMDD");
Date date = sdf.parse(input);
使用RegExp(&):
(虽然它会检查有效的月和日数值,但不会检查当前月份是否只有28/30天。如果需要检查,可以添加该数值。)您可以使用,这里有一个解决方案-
private static final java.text.SimpleDateFormat sdf =
new java.text.SimpleDateFormat("yyyyMMdd");
public static java.util.Date verifyInput(String input) {
if (input != null) {
try {
java.util.Date ret = sdf.parse(input.trim());
if (sdf.format(ret).equals(input.trim())) {
return ret;
}
} catch (ParseException e) {
e.printStackTrace();
}
}
return null;
}
public static void main(String[] args) {
String[] dates = new String[] { "20141031",
"20130228", "20000229", "20000230" };
for (String str : dates) {
System.out.println(verifyInput(str));
}
}
输出
Fri Oct 31 00:00:00 EDT 2014
Thu Feb 28 00:00:00 EST 2013
Tue Feb 29 00:00:00 EST 2000
null
你可以通过..来验证它
boolean validate(String s)
{
if(s.length()!=8)
return false;
try{
int year=Integer.parseInt(s.substring(0,4));
}
catch(Exception e)
{
return false;
}
try{
int month=Integer.parseInt(s.substring(4,6));
}
catch(Exception e)
{
return false;
}
try{
int date=Integer.parseInt(s.substring(6,8));
}
catch(Exception e)
{
return false;
}
if(month>12)
return false;
if(date>31)
return false;
return true;
}
要扩展Neuron的答案:
if (month < 1 || month > 12)
return false;
int days = 30;
if (month == 2) {
days = 28;
if ((year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0))) days = 29;
}
else {
if ((1 << month) & 0x15A2) days = 31;
}
if (date < 1 || date > days)
return false;
return true;
if(月<1 | |月>12)
返回false;
整日=30天;
如果(月份==2){
天数=28天;
如果((年份%4==0)和((年份%100!=0)| |(年份%400==0)))天=29天;
}
否则{
如果((1天)
返回false;
返回true;
您可以这样做:
private boolean validateDateFormat(String input) {
if(input == null) {
return false;
}
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
try {
Date d = format.parse(input);
logger.debug(d);
return true;
} catch(ParseException e) {
return false;
}
}
使用此方法对其进行单元测试:
@Test
public void TestDateValidation() {
logger.info("\ntestDateValidation()");
assertEquals(false, validateDateFormat("hello"));
assertEquals(false, validateDateFormat(null));
assertEquals(false, validateDateFormat(""));
assertEquals(false, validateDateFormat("d20140228"));
assertEquals(false, validateDateFormat("Feb 28, 2014"));
assertEquals(true, validateDateFormat("20140228"));
validateDateFormat("20140229");
validateDateFormat("2014024000");
}
给出此输出:
Fri Feb 28 00:00:00 EST 2014
Sat Mar 01 00:00:00 EST 2014
Mon Jan 13 00:00:00 EST 2025
不幸的是,这两个奇怪的日期仍然被解析为真实日期,但根据您的要求,这似乎不是问题。使用
yyyyMMdd
?input.matches(\\d{8})运行SimpleDateFormat
测试输入是否由8位数字组成。验证年份和月份是否在范围内很容易,但验证月份的日期是否与月份一致(闰年为年份)更难。如果需要完全验证,使用日期转换器是有意义的。谢谢Elliott..现在有意义..我没有意识到SimpleDateFormat
…今天学到了一些新东西..我又遇到了一个问题。看看你是否可以帮我解决..谢谢你的帮助..你需要将lenient设置为false(setLenient(false);)对于简单的日期格式,否则有时结果将无效,例如yyyy-mm-dd将使用错误的日期进行解析。+1。足够简单…谢谢B.J…现在有意义。我还遇到了一个问题。看看你是否可以帮我解决。谢谢你的帮助。你还应该检查月份<1和日期<1。你可能想学习。谢谢热舔这是一个建议…它与其他方法略有不同,但确实有效。我还遇到了一个问题。看看你是否能帮我。谢谢你的帮助。
@Test
public void TestDateValidation() {
logger.info("\ntestDateValidation()");
assertEquals(false, validateDateFormat("hello"));
assertEquals(false, validateDateFormat(null));
assertEquals(false, validateDateFormat(""));
assertEquals(false, validateDateFormat("d20140228"));
assertEquals(false, validateDateFormat("Feb 28, 2014"));
assertEquals(true, validateDateFormat("20140228"));
validateDateFormat("20140229");
validateDateFormat("2014024000");
}
Fri Feb 28 00:00:00 EST 2014
Sat Mar 01 00:00:00 EST 2014
Mon Jan 13 00:00:00 EST 2025