gpt4 book ai didi

java - 仅接受用户提供的两位或四位数年份

转载 作者:行者123 更新时间:2023-12-01 11:37:20 24 4
gpt4 key购买 nike

我必须通过简单的 inputText 字段(JSF 2)接受用户的日期。我创建了一个转换器,以便我可以验证日期,但现在我遇到了 1、3 和 5+ 位数年份的问题。用户输入的所有日期都可以是今天或将来(不超过合理的最大值)。

以下解决方案接受三种不同的日期格式,并将正确处理 2 和 4 位数年份(在前一种情况下,通过使用 set2DigitYearStart 将它们转换为 20XX)。我完全不知道如何处理其他错误的日期。

代码

public static void main(String[] args) throws Exception {

String date = "2/3/111"; // This should be rejected!

List<String> datePatterns = new ArrayList<String>();
datePatterns.add("MM-dd-yy");
datePatterns.add("MM.dd.yy");
datePatterns.add("MM/dd/yy");

for (String pattern : datePatterns) {
SimpleDateFormat formatter = new SimpleDateFormat(pattern);
formatter.set2DigitYearStart(new SimpleDateFormat("MM/dd/yyyy").parse("1/1/2000"));
formatter.setLenient(false);
try {
System.out.println(formatter.parse(date));
break;
} catch (ParseException ignore) {
System.out.println("Date format doesn't match pattern: " + pattern);
}
}
}

应该接受的示例

  • 2002年2月2日
  • 2002年2月2日

应该拒绝的示例

  • 02/02/1
  • 333年2月2日
  • 02/02/55555

一种方法

获取一些理论上的 maxDate 和昨天的日期,然后比较输出。不过,这似乎是错误的......

        SimpleDateFormat f4 = new SimpleDateFormat("MM/dd/yyyy");
Date maxDate = f4.parse("01/01/2099");

DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
Date minDate = f4.parse(dateFormat.format(cal.getTime()));

最佳答案

在解析完成后添加一些特定的验证,以拒绝任何超出范围的年份,即 getYear() < 1000 和 getYear() > 9999

警告当我在平板电脑上打字时,此代码未编译或测试。

    String dateStr = "2/3/111"; // This should be rejected!

List<String> datePatterns = new ArrayList<String>();
datePatterns.add("MM-dd-yy");
datePatterns.add("MM.dd.yy");
datePatterns.add("MM/dd/yy");

Date date = null;
for (String pattern : datePatterns) {
SimpleDateFormat formatter = new SimpleDateFormat(pattern);
formatter.set2DigitYearStart(new SimpleDateFormat("MM/dd/yyyy").parse("1/1/2000"));
formatter.setLenient(false);
try {
date = dateformatter.parse(dateStr));
break;
} catch (ParseException ignore) {
continue;
}
}
if (date != null) {
Calendar cal = new GregorianCalendar (date);
int year = cal.get(Calendar.YEAR);
if (year() < 1000 || year() > 9999) {
System.out.println("Date format doesn't match pattern: "
+ datePatterns);
}
} else {
System.out.println("Date format doesn't match pattern: "
+ datePatterns);
{

关于java - 仅接受用户提供的两位或四位数年份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29836759/

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