日期字符串到unix时间戳,以检查用户是否老

时间:2018-08-16 14:54:40

标签: 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.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,我得到946159200000,而第二种方法中得到1110033481894,如何从第一种方法中获得正确的时间?

1 : 946159200000
2 : 1110033481894

第一种方法有问题,我无法正确解决。

1 个答案:

答案 0 :(得分:0)

您使用错误的格式"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);

它打印:Fri Jan 21 00:00:00 EET 2000
然后尝试错误的一个:

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();
}