Java 将日期字符串转换为unix时间戳以检查用户是否足够老
我正在检查用户是否超过13岁。所以我做了下面的事情Java 将日期字符串转换为unix时间戳以检查用户是否足够老,java,android,date,calendar,Java,Android,Date,Calendar,我正在检查用户是否超过13岁。所以我做了下面的事情 public boolean isUserOldEnough(String birthDay) { Date date = null; try { date = new SimpleDateFormat("YYYY/MM/DD").parse(birthDay); } catch (ParseException e) { e.printStackTr
public boolean isUserOldEnough(String birthDay) {
Date date = null;
try {
date = new SimpleDateFormat("YYYY/MM/DD").parse(birthDay);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
long birthTime = calendar.getTimeInMillis();
return birthTime > getMinAge();
}
public long getMinAge() {
Calendar calendar = Calendar.getInstance();
int currentYear = calendar.get(Calendar.YEAR);
calendar.set(currentYear - 13, Calendar.MONTH, Calendar.DAY_OF_MONTH);
return calendar.getTimeInMillis();
}
从第一种方法中,使用2000/01/21
,我得到94615920000
,而第二种方法给出1110033481894
,我如何从第一种方法中得到正确的时间
1 : 946159200000
2 : 1110033481894
第一个方法有问题,我无法正确使用。您以错误的格式解析日期
“YYYY/MM/DD”
,必须使用“YYYY/MM/DD”
,请尝试:Date date = null;
try {
date = new SimpleDateFormat("yyyy/MM/dd").parse("2000/1/21");
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(date);
它打印:2000年1月21日星期五00:00:00 EET
然后试试错误的:
Date date = null;
try {
date = new SimpleDateFormat("YYYY/MM/DD").parse("2000/1/21");
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(date);
它打印:Mon Jan 03 00:00:00 EET 2000
编辑:如果用户年龄足够大,则其出生日期的毫秒数小于13年前的毫秒数用以下代码替换您的代码:
public boolean isUserOldEnough(String birthDay) {
Date date = null;
try {
date = new SimpleDateFormat("yyyy/MM/dd").parse(birthDay);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
long birthTime = calendar.getTimeInMillis();
return birthTime <= getMinAge();
}
public long getMinAge() {
Calendar calendar = Calendar.getInstance();
int currentYear = calendar.get(Calendar.YEAR);
int currentMonth = calendar.get(Calendar.MONTH);
int currentDay = calendar.get(Calendar.DAY_OF_MONTH);
calendar.set(currentYear - 13, currentMonth, currentDay);
return calendar.getTimeInMillis();
}
public boolean isUserOldEnough(字符串生日){
日期=空;
试一试{
日期=新的简化格式(“yyyy/MM/dd”)。解析(生日);
}捕获(解析异常){
e、 printStackTrace();
}
日历=Calendar.getInstance();
日历。设置时间(日期);
长生日=日历。getTimeInMillis();
首先返回出生时间isUserOldThough(),第二版代码> GETMIGEAGE/代码>作为一个考虑,扔掉长期过时和臭名昭著的麻烦代码< SimpleDateFormat >代码>和朋友,并添加到Android项目中,以便使用<代码> java。时间<代码>,现代java日期和时间API。(LocalDate.parse(“2000/01/21.replace(“/”,“-”),LocalDate.now())>13
这些麻烦的类在几年前就被现代的java.time类取代了。建议在2018年使用它们是一个糟糕的建议。麻烦是的,但仍然使用,因为在某些情况下它们非常简单。非常简单?比使用java.time的单行程序更简单?ChronoUnit.years.between(LocalDate.parse(“2000/01/21.replace”(/),“-”),LocalDate.now()>13
我认为每一个被使用的日期时间类都会意识到每一个新的发展吗?当然不会……这就是我发表评论的原因!我试图让您和读者知道,这些旧的日期时间类在所有方面都很糟糕,永远不应该被使用。这就是为什么Sun、Oracle和JCP社区在四年前都决定采用的原因,代表将它们与java.time类结合起来。Calendar
和SimpleDateFormat
的另一个问题是:我们已经使用它们25年了,所以告诉我们如何使用它们的教程仍然非常丰富,尽管我们不应该再使用这些类了。它们可能很容易使用,但从这些问题的数量来看它们也很容易出错。