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

リンク先のオンライン サービスは間違っています。年齢を 1 日としてカウントし、1 日が正確に 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 に答える