39

Webでさまざまな方法を試しましたが、機能させることができませんでした。

Cursor cursor = sqlite.myDataBase.rawQuery("SELECT StartDate, EndDate FROM Tracks Where Id="+'"'+trackId+'"',null);

SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date startDate = outputFormat.parse(cursor.getString(cursor.getColumnIndex("StartDate")));
Date endDate = outputFormat.parse(cursor.getString(cursor.getColumnIndex("EndDate")));

このようにして、両方の日付を適切な形式で取得します。ここで、との違いを秒単位で見つけたいと思いEndDateますStartdate

何かアドバイス?ありがとうございました。

4

4 に答える 4

119

日付オブジェクトをlong(1970年1月1日からのミリ秒)に変換してから、を使用TimeUnitして秒数を取得できます。

long diffInMs = endDate.getTime() - startDate.getTime();

long diffInSec = TimeUnit.MILLISECONDS.toSeconds(diffInMs);

編集:-2行目にdiffInM(i)sと記述された変数diffInMsの名前を修正しました。

于 2010-10-18T15:44:13.557 に答える
6

以下の方法を試してください:-

    public String twoDatesBetweenTime(String oldtime)
    {
        // TODO Auto-generated method stub
        int day = 0;
        int hh = 0;
        int mm = 0;
        try
        {
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date oldDate = dateFormat.parse(oldtime);
            Date cDate = new Date();
            Long timeDiff = cDate.getTime() - oldDate.getTime();
            day = (int) TimeUnit.MILLISECONDS.toDays(timeDiff);
            hh = (int) (TimeUnit.MILLISECONDS.toHours(timeDiff) - TimeUnit.DAYS.toHours(day));
            mm = (int) (TimeUnit.MILLISECONDS.toMinutes(timeDiff) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(timeDiff)));
        }
        catch (ParseException e)
        {
            e.printStackTrace();
        }
        if(day==0)
        {
            return hh + " hour " + mm + " min";
        }
        else if(hh==0)
        {
            return mm + " min";
        }
        else
        {
            return day + " days " + hh + " hour " + mm + " min";
        }
    }
于 2014-07-31T13:25:03.507 に答える
5

日付の代わりに時間を使用している他の開発者(私のような)のためにこの答えを補足するだけです。

Time t1 = new Time();
t1.setToNow();
Thread.sleep(1000);

Time t2 = new Time();
t2.setToNow();

diff = TimeUnit.MILLISECONDS.toSeconds(t2.toMillis(true)-t1.toMillis(true));
于 2013-08-24T21:43:48.943 に答える
2

他の回答は機能し、2010年にはすばらしい回答でしたが、私は最新の回答を提供しています。

java.timeおよびThreeTenABP

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");
    ZoneId zone = ZoneId.systemDefault();

    String startDateString = "2019-12-31 23:34:45";
    String endDateString = "2020-01-01 07:56:34";

    ZonedDateTime start = LocalDateTime.parse(startDateString, formatter).atZone(zone);
    ZonedDateTime end = LocalDateTime.parse(endDateString, formatter).atZone(zone);

    long diffSeconds = ChronoUnit.SECONDS.between(start, end);

    System.out.println("Difference: " + diffSeconds + " seconds");

ほとんどのタイムゾーンで、このスニペットから出力されるのは次のとおりです。

違い:30109秒

ZonedDateTime夏時間(DST)への移行と夏時間からの移行、およびその他の時間の異常を考慮に入れているため、私は使用しています。もちろん、正しいタイムゾーンを使用する必要があります。日付と時刻をデータベースに保存してからデバイスのタイムゾーン設定を変更すると、予期しない事態が発生する可能性があります。このようなことを防ぐために、UTCオフセットを時刻とともに保存しOffsetDateTime、取得時にそれらを解析することができます。

質問:java.timeはAndroid APIレベル26を必要としませんか?

java.timeは、古いAndroidデバイスと新しいAndroidデバイスの両方でうまく機能します。少なくともJava6が必要です。

  • Java 8以降および新しいAndroidデバイス(APIレベル26以降)では、最新のAPIが組み込まれています。
  • Android以外のJava6および7では、最新のクラスのバックポートであるThreeTenバックポートを取得します(JSR 310の場合はThreeTen。下部のリンクを参照してください)。
  • (古い)Androidでは、Android版のThreeTenBackportを使用します。それはThreeTenABPと呼ばれています。org.threeten.bpまた、サブパッケージを使用して日付と時刻のクラスをインポートするようにしてください。

リンク

于 2020-03-10T05:15:23.617 に答える