java日期字符串校验_Java:检查当前字符串的日期格式是否符合要求的格式

免责声明

将字符串解析为未知格式的日期/时间值本质上是不可能的(让我们面对现实,这3/3/3实际上意味着什么?!),我们所能做的就是“尽力而为”

重要

此解决方案不会抛出Exception,而是返回boolean,这是设计使然。任何Exceptions都纯粹用作保护机制。

由于现在是2018年,并且Java 8+具有日期/时间API(其余的具有ThreeTen backport)。解决方案基本保持不变,但变得稍微复杂些,因为我们需要执行以下检查:

日期和时间

仅日期

只有时间

这使它看起来像...

public static boolean isValidFormat(String format, String value, Locale locale) {

LocalDateTime ldt = null;

DateTimeFormatter fomatter = DateTimeFormatter.ofPattern(format, locale);

try {

ldt = LocalDateTime.parse(value, fomatter);

String result = ldt.format(fomatter);

return result.equals(value);

} catch (DateTimeParseException e) {

try {

LocalDate ld = LocalDate.parse(value, fomatter);

String result = ld.format(fomatter);

return result.equals(value);

} catch (DateTimeParseException exp) {

try {

LocalTime lt = LocalTime.parse(value, fomatter);

String result = lt.format(fomatter);

return result.equals(value);

} catch (DateTimeParseException e2) {

// Debugging purposes

//e2.printStackTrace();

}

}

}

return false;

}

这使得以下...

System.out.println("isValid - dd/MM/yyyy with 20130925 = " + isValidFormat("dd/MM/yyyy", "20130925", Locale.ENGLISH));

System.out.println("isValid - dd/MM/yyyy with 25/09/2013 = " + isValidFormat("dd/MM/yyyy", "25/09/2013", Locale.ENGLISH));

System.out.println("isValid - dd/MM/yyyy with 25/09/2013 12:13:50 = " + isValidFormat("dd/MM/yyyy", "25/09/2013  12:13:50", Locale.ENGLISH));

System.out.println("isValid - yyyy-MM-dd with 2017-18--15 = " + isValidFormat("yyyy-MM-dd", "2017-18--15", Locale.ENGLISH));

输出...

isValid - dd/MM/yyyy with 20130925 = false

isValid - dd/MM/yyyy with 25/09/2013 = true

isValid - dd/MM/yyyy with 25/09/2013 12:13:50 = false

isValid - yyyy-MM-dd with 2017-18--15 = false

原始答案

简单尝试使用以下方法String将解析为所需DateSimpleDateFormat

Date date = null;

try {

SimpleDateFormat sdf = new SimpleDateFormat(format);

date = sdf.parse(value);

if (!value.equals(sdf.format(date))) {

date = null;

}

} catch (ParseException ex) {

ex.printStackTrace();

}

if (date == null) {

// Invalid date format

} else {

// Valid date format

}

然后,您可以简单地编写一个简单的方法来执行此操作,并true在Date不为空时返回...

作为建议...

更新了运行示例

我不确定您在做什么,但是下面的示例...

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

public class TestDateParser {

public static void main(String[] args) {

System.out.println("isValid - dd/MM/yyyy with 20130925 = " + isValidFormat("dd/MM/yyyy", "20130925"));

System.out.println("isValid - dd/MM/yyyy with 25/09/2013 = " + isValidFormat("dd/MM/yyyy", "25/09/2013"));

System.out.println("isValid - dd/MM/yyyy with 25/09/2013 12:13:50 = " + isValidFormat("dd/MM/yyyy", "25/09/2013  12:13:50"));

}

public static boolean isValidFormat(String format, String value) {

Date date = null;

try {

SimpleDateFormat sdf = new SimpleDateFormat(format);

date = sdf.parse(value);

if (!value.equals(sdf.format(date))) {

date = null;

}

} catch (ParseException ex) {

ex.printStackTrace();

}

return date != null;

}

}

输出(类似)...

java.text.ParseException: Unparseable date: "20130925"

isValid - dd/MM/yyyy with 20130925 = false

isValid - dd/MM/yyyy with 25/09/2013 = true

isValid - dd/MM/yyyy with 25/09/2013 12:13:50 = false

at java.text.DateFormat.parse(DateFormat.java:366)

at javaapplication373.JavaApplication373.isValidFormat(JavaApplication373.java:28)

at javaapplication373.JavaApplication373.main(JavaApplication373.java:19)

不正确。对于isValidFormat(“ yyyy-MM-dd”,“ 2017-18--15”); 不抛出任何异常。

isValid - yyyy-MM-dd", "2017-18--15 = false

似乎对我来说可以正常工作-该方法不依靠(也不抛出)单独的异常来执行其操作

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值