我试图在java中验证一个日期,一切都很好,除了它不会让我把2位数年。我尝试使用“yyyy”格式和“y”,但不起作用。
编辑:有些人误解了我的意思。我想要得到的是输入日期“1/1/55”并获得日期“1/1/55”而不是“1/1/1955”,所以我不打算使用“yy”作为日期格式,即使你可以改变世纪,我也希望把一年的数字放在2位以上。问题在于验证(如果)。 TestDate是FechaString的解析,但当我比较两者时,当FechaString为“1/1/55”时,testDate的值为例如“1/1/0055”,并且它不会将它们识别为相等。
SimpleDateFormat df = new SimpleDateFormat("d/M/y");
Date testDate = null;
String FechaString;
int dia,mes,anno;
boolean error=false;
do{
System.out.println("Introduzca la fecha de nacimiento (dd/mm/aaaa)");
FechaString = entrada.nextLine();
try{
testDate = df.parse(FechaString);
} catch (ParseException e){ System.out.println("Formato no válido");}
if (!df.format(testDate).equals(FechaString)){
System.out.println("\nFECHA NO PERMITIDA!!");
error=true;
} else {
System.out.println("\nFecha: OK");
error=false;
}
}while (error);
FechaNac = df.parse(FechaString);
答案 0 :(得分:3)
使用yy
作为年度,查看setTwoDigitYearStart方法。你需要告诉它哪个世纪你想要将这一年视为。
答案 1 :(得分:2)
根据java docs
使用缩写的年份模式(“y”或“yy”)进行解析, SimpleDateFormat必须解释相对于某些的缩写年份 世纪。它通过将日期调整到80年之前来实现 并且在创建SimpleDateFormat实例之后20年。 例如,使用“MM / dd / yy”模式和SimpleDateFormat 在1997年1月1日创建的实例,字符串“01/11/12”将是 解释为2012年1月11日,而字符串“05/04/64”将是 解释为1964年5月4日。在解析期间,只有字符串组成 正好由Character.isDigit(char)定义的两位数字 解析为默认世纪。任何其他数字字符串,例如a 一位数字符串,三位或更多位数字符串或两位数字符串 这不是所有数字(例如,“ - 1”),按字面解释。 所以使用与Jan相同的模式解析“01/02/3”或“01/02/003” 2,公元3年。同样,“01/02 / -3”被解析为公元前1月2日。
因此,该行为已在文档中清楚地解释。但是,您可以使用century
此方法更改默认SimpleDateFormat#set2DigitYearStart()
的设置。
答案 2 :(得分:1)
您可以使用yy代替y。
**SimpleDateFormat s=new SimpleDateFormat("dd/MM/yy");
String format = s.format(new Date());
System.out.println(format);**
答案 3 :(得分:1)
您想要的是直接来自java.time
,现代Java日期和时间API。让我演示一下:
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("d/M/u");
for (String dateString : new String[] { "1/1/5", "1/1/55", "1/1/755", "1/1/1955" }) {
LocalDate date = LocalDate.parse(dateString, dtf);
System.out.println(date);
String formattedBack = date.format(dtf);
System.out.println(formattedBack);
System.out.println("Equal to original string? " + formattedBack.equals(dateString));
}
打印
0005-01-01
1/1/5
Equal to original string? true
0055-01-01
1/1/55
Equal to original string? true
0755-01-01
1/1/755
Equal to original string? true
1955-01-01
1/1/1955
Equal to original string? true
现代API(通常也)可以更好地使用。所以我建议你把麻烦的SimpleDateFormat
和其他过时的日期时间类别抛到一边。
唯一需要注意的是现代课程使用Proleptic Gregorian日历。它的日期并不总是与老式班级用于旧日期的儒略历一致。
答案 4 :(得分:0)
@PixelFox简单日期格式应该与此"dd/MM/yyyy"
试试这个希望它的帮助...
进口
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
try {
SimpleDateFormat simpledate = new SimpleDateFormat(format);
testDate = df.parse(FechaString);
if (!FetchString.equals(sdf.format(testdate))) {
testdate = null;
}else{}
} catch (ParseException ex) {
ex.printStackTrace();
}