相关疑难解决方法(0)

如何使用时间API检查字符串是否与日期模式匹配?

我的程序正在将输入字符串解析为LocalDate对象.在大多数情况下,字符串看起来像30.03.2014,但偶尔看起来像3/30/2014.根据具体情况,我需要使用不同的模式来调用DateTimeFormatter.ofPattern(String pattern).基本上,我需要检查字符串是否与模式匹配,dd.MM.yyyy或者M/dd/yyyy在进行解析之前.

正则表达式的方法类似于:

LocalDate date;
if (dateString.matches("^\\d?\\d/\\d{2}/\\d{4}$")) {
  date = LocalDate.parse(dateString, DateTimeFormatter.ofPattern("M/dd/yyyy"));  
} else {
  date = LocalDate.parse(dateString, DateTimeFormatter.ofPattern("dd.MM.yyyy"));  
}
Run Code Online (Sandbox Code Playgroud)

这有效,但在匹配字符串时使用日期模式字符串会很好.

有没有任何标准方法可以使用新的Java 8时间API执行此操作,而无需使用正则表达式匹配?我查看过文档,DateTimeFormatter但找不到任何内容.

java datetime-format datetime-parsing java-8 java-time

12
推荐指数
1
解决办法
2万
查看次数

Java DateFormat.parse认为"100 112TH AVE NE"是一个日期

我正在使用此处包含的代码来确定给定值是否为有效日期.在一个特定情况下,它正在评估以下街道地址:

100 112TH AVE NE

显然不是约会,但Java将其解释为:

太阳1月12日00:00:00 EST 100

有问题的代码:

String DATE_FORMAT = "yyyyMMdd";
try {
    DateFormat dfyyyyMMdd = new SimpleDateFormat(DATE_FORMAT);
    dfyyyyMMdd.setLenient(false);
    Date formattedDate;
    formattedDate = dfyyyyMMdd.parse(aValue);
    console.debug(String.format("%s = %s","formattedDate",formattedDate));
} catch (ParseException e) {
    // Not a date
}
Run Code Online (Sandbox Code Playgroud)

控制台返回:

11:41:40.063 DEBUG TestValues | formattedDate = Sun 1月12日00:00:00 EST 100

知道这里发生了什么吗?

java date simpledateformat

5
推荐指数
1
解决办法
119
查看次数