gpt4 book ai didi

java - 简单日期格式错误

转载 作者:行者123 更新时间:2023-11-30 04:41:04 28 4
gpt4 key购买 nike

 /**
* Validates a date in String data type according to the given date format.
*
* @param validDateFormat
* valid date format e.g. YYYY/MM/DD
* @param strDate
* - the date to be validated
* @return true if the date is valid according to the given format
*/
public static boolean isValidDate(final String strDate, final String validDateFormat) {
boolean result = true;

try {
if (StringUtils.isNotBlank(validDateFormat) && StringUtils.isNotBlank(strDate)
&& StringUtils.isNotEmpty(strDate)) {
dateValidator = new SimpleDateFormat(validDateFormat, Locale.ENGLISH);
dateValidator.setLenient(false);
dateValidator.parse(strDate);


Log.i(TAG, "***Date entered: "+ strDate +
"\nDate parsed back: "+dateValidator.format(dateValidator.parse(strDate)));

dateValidator = null;
}
else
{
result = false;
}
} catch (final ParseException e) {
result = false;
} catch (final IllegalArgumentException e) {
result = false;
} catch (final Exception e) {
result = false;
}

return result;
}

当我输入例如:

boolean result = isValidDate("21/May/201l", "dd/MMM/yyyy");
//result = true

请注意,输入的不是 2011,而是 201 + 字母“l”。

日志:

  ***Date entered: 21/May/201l
Date parsed back: 21/May/0201

它不会抛出任何异常,也不会使其为假!!!!

为什么YYYYYYYYY!?

最佳答案

更新:一个想法是对您的输入施加相当严格的限制:输入的date 字符串和format 字符串必须匹配< em>正是;您可以通过执行以下操作来强制执行此操作:

Date parsed = dateValidator.parse(strDate);
return strDate.equals(dateValidator.format(parsed));

换句话说,验证格式化实际的 Date 对象是否返回一个与传入的字符串相同的字符串。这确保您不会有错误的 positive当格式字符串中实际上存在无效字符时的结果(因为为了重新格式化日期,这些字符将被忽略)。

我不确定这是一个好的解决方案,因为它可能过于严格。我还没有真正仔细考虑过。但无论如何,这是一个想法。


来自 the documentation of DateFormat.parse (由 SimpleDateFormat 继承):

The method may not use the entire text of the given string.

此外,来自同一方法的“Throws”部分:

ParseException - if the beginning of the specified string cannot be parsed.

请注意:如果我用字符串“yyyy-MM-dd”实例化一个 SimpleDateFormat,那么它将成功解析字符串“2011-05-12abcdefg”:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(format.parse("2011-05-12abcdefg"));

以上输出(在我的机器上):

Thu May 12 00:00:00 CDT 2011

所以基本上它只是尽可能多地解析

事实上,即使使用 setLenient(false) 也是如此,这对我来说确实有点奇怪。

关于java - 简单日期格式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5985912/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com