Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将日期字符串转换为unix时间戳以检查用户是否足够老_Java_Android_Date_Calendar - Fatal编程技术网

Java 将日期字符串转换为unix时间戳以检查用户是否足够老

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

我正在检查用户是否超过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
,我得到
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年了,所以告诉我们如何使用它们的教程仍然非常丰富,尽管我们不应该再使用这些类了。它们可能很容易使用,但从这些问题的数量来看它们也很容易出错。