我想使用格式为“yyyymmdd”的simpleDateFormat验证和解析日期 这也允许100624,解析到10年(Julius Ceasar去世后54年)。日期也会像1970年一样,所以我不想和SimpleDateFornat(“yymmdd”)达成和解。
我想知道有没有办法使用SimpleDateFormat强制四位数年份格式?我已经接近做了一个regexp测试,但也许有一种聪明的方法可以使用(Simple)DateFormat()?
根据要求,代码越来越复杂,我的研究也减少了一半。使用的格式是yyyy-MM-dd开头(它来自一个变量,它有一个错误的javadoc)。但是如下面的答案中所示,yyyyMMdd确实强制使用了四年的数字。所以我的问题改为如何强制“yyyy-MM-dd”格式的四位数年份。为什么“yyyyMMdd”表现不同?
public void testMaturity() {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
sdf.setLenient(false);
System.out.println(" " + sdf.format(sdf.parse("40-12-14")));
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMdd");
sdf.setLenient(false);
System.out.println(" " + sdf2.format(sdf2.parse("401214")));
fail();
} catch (ParseException pe) {
assertTrue(true);
}
打印0040-12-14
答案 0 :(得分:4)
只需使用yyyyMMdd
(注意:大写字母M用于表示月份,否则为you're parsing minutes!)然后检查年份是否更大一些截止日期(例如,解析出生日期时,更高1800是一个安全的赌注,当解析日期大于或等于当前年份的日期将是好的。
答案 1 :(得分:2)
嗯。我怀疑你应该使用“MM”而不是“mm”来开始......但是当我尝试时,“100624”无法解析 - 即使在宽松模式下:
import java.util.*;
import java.text.*;
public class Test
{
public static void main(String[] args) throws Exception
{
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
format.setLenient(true);
tryParse(format, "100624");
format.setLenient(false);
tryParse(format, "100624");
}
static void tryParse(DateFormat format, String text)
{
try
{
Date date = format.parse(text);
System.out.println("Parsed " + text + " to " + date);
}
catch (ParseException pe)
{
System.out.println("Failed to parse " + text);
}
}
}
(即使使用“mm”代替“MM”,仍无法解析。)
打印:
Failed to parse 100624
Failed to parse 100624
也许您可以显示 管理解析此代码的代码?
答案 2 :(得分:2)
尝试在setLenient(false);
对象上调用SimpleDateFormat
- 这将使其使用更严格的解析规则(否则如果输入字符串与格式不完全匹配,它将尝试“智能” )。例如:
DateFormat df = new SimpleDateFormat("yyyyMMdd");
df.setLenient(false);
当然,月份是MM
,而不是mm
。
答案 3 :(得分:1)
没有简单的方法。如果你说日期可以像1970年一样,主要问题是700624的意思 - 1970年或2070年?您应该实施一些像Joachim建议的截止日期,或者完全移动到4位数。
答案 4 :(得分:1)
嗯,这是非常直接和前进的。请按照以下简单步骤操作:
第1步:
try {
String dates = "40-12-14";
String patterns = "yy-MM-dd";
SimpleDateFormat format3 = new SimpleDateFormat(patterns);``
java.util.Date dates1 = format3.parse(dates);
SimpleDateFormat sdfDates = new SimpleDateFormat("dd/MM/yyyy");
String strDate1 = sdfDate.format(dates1);
System.out.println("Date1: " + strDate1);
}
catch(ParseException e){
e.printStackTrace();
}
这将输出:
Date1: 14/12/1940