2

对于可能在这里绊倒的其他人,此问题中提到的链接会产生误导性结果

我的第一次约会:1986-04-08。当前日期:2013-11-28。

代码:

public long seconds(Date date){

        String formattedDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",getResources().getConfiguration().locale).format(Calendar.getInstance().getTime());

        String DateStr=String.valueOf(formattedDate);
        Date d = null;
        try {
            d = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",getResources().getConfiguration().locale).parse(DateStr);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
        java.sql.Date dx = new java.sql.Date(d.getTime());
        Date d1 = date;
        Date d2 = dx;
        t4.setText("BirthDate"+date+"\n Current Date:"+dx);
        long seconds = (d2.getTime()-d1.getTime())/1000;
        return seconds;
    }

但是,当我在这里查看结果时:http: //www.calculator.net/age-calculator.html? today=04%2F04%2F1986&ageat=11%2F28%2F2013&x=32&y=10 它给了我一个稍微不同的结果。我不确定我哪里出错了。

4

3 回答 3

4

您链接到的在线服务是错误的:它将年龄计算为一整天,然后假设每天正好是 24 小时。大多数时候这是正确的,但在世界上的大多数地方,都有夏令时转换和时区转换的日子,这意味着有些日子有 23、25 或其他一些小时数。您从 Java 代码中获得的数字更加精确。

于 2013-11-28T11:24:27.377 回答
2

我认为您以某种方式混合了 java.sql.Date 和 java.util.Date。

我会尝试简化代码。像这样的东西。

public class Test012 {

    public static void main(String[] args) throws Exception {
        System.out.println( seconds() );
        System.out.println( seconds2() );
        System.out.println( days3() );
    }

    public static long seconds() throws Exception {
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd");
        java.util.Date d1 = sdf.parse("1986-04-08");
        java.util.Date d2 = sdf.parse("2013-11-28");
        return ( d2.getTime() - d1.getTime() ) / 1000;
    }

    public static long seconds2() throws Exception {
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd");
        java.util.Date d1 = sdf.parse("1986-04-08");
        java.util.Date d2 = new java.util.Date();
        return ( d2.getTime() - d1.getTime() ) / 1000;
    }

    public static long days3() throws Exception {
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd");
        java.util.Date d1 = sdf.parse("2008-01-01");
        java.util.Date d2 = sdf.parse("2009-01-01");
        return ( d2.getTime() - d1.getTime() ) / 1000 / 60 / 60 / 24;
    }

}

我也试过

select datediff(ss, '4/8/1986', '11/28/2013')  --- US date format

在 SQL Server 中,它打印与这个 java 程序相同的东西,它打印 872294400。所以这似乎是正确的值。

您确定输入的日期是正确的(与我在测试程序中硬编码的日期相同)吗?我也会检查的。

另外,你确定你的日期有零时间部分吗?这就是您发布的链接/服务所假定的。

于 2013-11-28T11:31:25.210 回答
0

试试这个代码: -

 public static long secondsBetween(Calendar startDate, Calendar endDate) {
    Calendar date = (Calendar) startDate.clone();
    long daysBetween = 0;
    while (date.before(endDate)) {
        date.add(Calendar.DAY_OF_MONTH, 1);
        daysBetween++;
    }
    return daysBetween*24*3600;
}

希望它可以帮助你..享受..!

于 2013-11-28T11:20:03.040 回答