JavaDateFormat——我可以将输入与某些格式进行比较,并根据匹配的格式解析输入吗?
例如: 用户可以输入01/23/1983或1/23/1983JavaDateFormat——我可以将输入与某些格式进行比较,并根据匹配的格式解析输入吗?,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
我如何使用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您是对的,在这种特殊情况下它是多余的;但是,在处理多种格式时,这是一种常见的方法。