JavaDateFormat——我可以将输入与某些格式进行比较,并根据匹配的格式解析输入吗?

JavaDateFormat——我可以将输入与某些格式进行比较,并根据匹配的格式解析输入吗?,java,date,date-format,Java,Date,Date Format,例如: 用户可以输入01/23/1983或1/23/1983 我如何使用DateFormat编写两种不同的格式,如(MM/DD/YYYY)和(M/DD/YYYY),并将它们与实际日期进行比较,以查看哪一种与日期匹配,以便成功解析它?处理多个输入格式时,一个常见的解决方案是在循环中尝试一系列预期格式,直到其中一种成功,否则一切都会失败。例如: public Date parseDate(List<DateFormat> formats, String text) { for(D

例如:

用户可以输入01/23/1983或1/23/1983


我如何使用DateFormat编写两种不同的格式,如(MM/DD/YYYY)和(M/DD/YYYY),并将它们与实际日期进行比较,以查看哪一种与日期匹配,以便成功解析它?

处理多个输入格式时,一个常见的解决方案是在循环中尝试一系列预期格式,直到其中一种成功,否则一切都会失败。例如:

public Date parseDate(List<DateFormat> formats, String text) {
    for(DateFormat fmt : formats) {
        try {
          return fmt.parse(inputDate);
        } catch (ParseException ex) {}
    }
    return null;
}

List<DateFormat> formats = Arrays.asList(new SimpleDateFormat("MM/dd/yyyy"));
Date d1 = parseDate(formats, "01/23/1983");
Date d2 = parseDate(formats, "1/23/1983");
公共日期解析日期(列表格式、字符串文本){
for(日期格式fmt:格式){
试一试{
返回fmt.parse(inputDate);
}catch(ParseException ex){}
}
返回null;
}
列表格式=Arrays.asList(新的SimpleDataFormat(“MM/dd/yyyy”);
日期d1=日期(格式为“1983年1月23日”);
日期d2=解析日期(格式为“1983年1月23日”);

处理多个输入格式时,一个常见的解决方案是在循环中尝试一系列预期的格式,直到一个成功,或者全部失败。例如:

public Date parseDate(List<DateFormat> formats, String text) {
    for(DateFormat fmt : formats) {
        try {
          return fmt.parse(inputDate);
        } catch (ParseException ex) {}
    }
    return null;
}

List<DateFormat> formats = Arrays.asList(new SimpleDateFormat("MM/dd/yyyy"));
Date d1 = parseDate(formats, "01/23/1983");
Date d2 = parseDate(formats, "1/23/1983");
公共日期解析日期(列表格式、字符串文本){
for(日期格式fmt:格式){
试一试{
返回fmt.parse(inputDate);
}catch(ParseException ex){}
}
返回null;
}
列表格式=Arrays.asList(新的SimpleDataFormat(“MM/dd/yyyy”);
日期d1=日期(格式为“1983年1月23日”);
日期d2=解析日期(格式为“1983年1月23日”);

因为Johan发布了一个错误的解决方案,我觉得有义务发布正确的解决方案<代码>“MM/dd/yyyy”将格式化两个测试字符串:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateFormatTest {
   public static void main(String[] args) {
      String[] tests = {"01/23/1983", "1/23/1983", "1/3/1983"};

      String formatString = "MM/dd/yyyy";

      SimpleDateFormat sdf = new SimpleDateFormat(formatString);

      for (String test : tests) {
         Date date = null;
         try {
            date = sdf.parse(test);
         } catch (ParseException e) {
            e.printStackTrace();
         }
         System.out.println(date);
      }
   }
}

因为Johan发布了一个错误的解决方案,我觉得有义务发布正确的解决方案<代码>“MM/dd/yyyy”将格式化两个测试字符串:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateFormatTest {
   public static void main(String[] args) {
      String[] tests = {"01/23/1983", "1/23/1983", "1/3/1983"};

      String formatString = "MM/dd/yyyy";

      SimpleDateFormat sdf = new SimpleDateFormat(formatString);

      for (String test : tests) {
         Date date = null;
         try {
            date = sdf.parse(test);
         } catch (ParseException e) {
            e.printStackTrace();
         }
         System.out.println(date);
      }
   }
}

首先,您应该使用发布的格式字符串创建一个SimpleDataFormat对象来测试它,并尝试解析这两个测试字符串。你可能会感到惊喜。尽管将年的y和日的d小写:
“MM/dd/yyyy”
。SimpleDataFormat类的API将告诉您这一点的重要性。首先,您应该使用发布的格式字符串创建一个SimpleDataFormat对象来测试它,并尝试解析这两个测试字符串。你可能会感到惊喜。尽管将年的y和日的d小写:
“MM/dd/yyyy”
。SimpleDataFormat类的API将告诉您为什么这很重要。没有必要,而且它是不正确的。请看我对原始帖子的评论。运行此代码时会发生什么情况?啊,您现在已将dd和yyyy编辑为小写,但仍有不必要的冗余。再说一遍,当只需要一个simpleDataFormat数组时,为什么您觉得需要使用一个simpleDataFormat数组列表呢?@Eels,ty您是对的,在这种特殊情况下它是多余的;但是,在处理多种格式时,这是一种常见的方法。没有必要,这是不正确的。请看我对原始帖子的评论。运行此代码时会发生什么情况?啊,您现在已将dd和yyyy编辑为小写,但仍有不必要的冗余。再说一遍,当只需要一个simpleDataFormat数组时,为什么您觉得需要使用一个simpleDataFormat数组列表呢?@Eels,ty您是对的,在这种特殊情况下它是多余的;但是,在处理多种格式时,这是一种常见的方法。