Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.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
Android 两个日期之间的秒差_Android_Date_Seconds - Fatal编程技术网

Android 两个日期之间的秒差

Android 两个日期之间的秒差,android,date,seconds,Android,Date,Seconds,我在网上尝试过不同的方法,但都没能成功 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 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
之间的差异,以秒为单位


有什么建议吗?谢谢。

您可以将日期对象转换为长时间(自1970年1月1日起为毫秒),然后使用
时间单位
获取秒数:

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

long diffInSec = TimeUnit.MILLISECONDS.toSeconds(diffInMs);
编辑:
-更正了在第二行中写入diffInM(i)s的变量diffInMs的名称。

只是对其他使用时间而不是日期的开发人员(如我)的回答的补充

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));
尝试以下方法:-

    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";
        }
    }

虽然其他答案都很有效,而且在2010年都是不错的答案,但我提供的是现代答案

java.time和ThreeTenABP 在大多数时区,此代码段的输出将是:

差距:30109秒

我使用的是
ZonedDateTime
,因为它考虑了夏季时间(DST)和其他时间异常之间的转换。当然,这要求你使用正确的时区。如果在将日期和时间存储到数据库后设备的时区设置发生了更改,则可能会出现一些意外情况。为了防止这种情况,您可以将UTC偏移量与时间一起存储,然后在检索时将其解析为
OffsetDateTime

问:java.time不需要Android API级别26吗? time在较旧和较新的Android设备上都能很好地工作。它至少需要Java6

  • 在Java8和更高版本以及更新的Android设备上(API级别26),现代API是内置的
  • 在非androidjava6和7中,获取三个后端口,即现代类的后端口(三个十用于jsr310;请参见底部的链接)
  • 在(较旧的)Android上使用Android版本的ThreeTen Backport。它叫ThreeTenABP。并确保从带有子包的
    org.threeten.bp
    导入日期和时间类
链接
  • 解释如何使用java.time
  • ,其中首先描述了
    java.time
  • ,java.time的后端口到Java6和Java7(JSR-310为三十)
  • ,Android版Three Ten Backport
  • ,解释得非常透彻

如果我的旧日期是2018-05-8 12:05:00,当前日期是2018-05-9 12:37:00,则此操作失败。这不会显示日差。是的,如果我的旧日期是2018-08-30 16:34:54,当前日期是2018-09-01 20:50:07,则以毫秒为单位的差异为负。是吗?(自API级别22以来已弃用)
    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");