Java ANDROID-如何显示已经过去的日期时间?

Java ANDROID-如何显示已经过去的日期时间?,java,android,datetime,duration,period,Java,Android,Datetime,Duration,Period,我想用特定的时间和日期显示已经过去的时间 例如: time1 = 2017-06-18 07:00:00 //set time curtime = 2017-06-19 07:00:01 //get the current time TextView将只显示0年0月1天00小时00分01秒已经过去了 如果有人能给我找到自我的最佳关键词,我会很感激 Ref:但这还不足以解决我的问题。您需要创建日历对象的日期对象,并对它们进行比较,以了解经过了多少时间 或者您可以使用Joda日期时间库来查找它 检

我想用特定的时间和日期显示已经过去的时间

例如:

time1 = 2017-06-18 07:00:00 //set time
curtime = 2017-06-19 07:00:01 //get the current time
TextView
将只显示
0年0月1天00小时00分01秒已经过去了

如果有人能给我找到自我的最佳关键词,我会很感激


Ref:但这还不足以解决我的问题。

您需要创建
日历
对象的
日期
对象,并对它们进行比较,以了解经过了多少时间

或者您可以使用
Joda
日期时间库来查找它

检查日期列表:


应该会提供您想要的信息。

要获得两个日期之间的差异,可以使用,这是Java 8新的日期/时间类的一个很好的后端口。对于Android,还有更多关于如何使用它的信息

首先,我将字符串解析为
LocalDateTime
对象,然后得到这些日期之间的差异。API创建了两个不同的“时差/时间量”概念:基于日期的时间量(以年、月和日为单位)和基于时间的时间量(以秒为单位)

输出为:

1天1秒


请注意,
Period
类已将字段(年、月和日)分隔开,而
Duration
类仅保留秒数(因此需要进行一些计算才能获得正确的结果)-它实际上有类似于
toHours()
的方法,但它只将秒数转换为小时,它并没有像我们想要的那样把所有的字段分开

您可以将
append()
方法自定义为所需的精确格式。我只是采用了打印
value+text
的简单方法,但您可以根据需要进行更改


Java新的日期/时间API 对于Java>=8,有一个。您可以使用此新API和,它具有
PeriodDuration
类(同时包含
Period
Duration

代码基本上与上面相同,唯一的区别是包的名称(在Java 8中是
Java.time
,在ThreeTen Backport(或Android的ThreeTenABP)中是
org.ThreeTen.bp
),但类和方法的名称是相同的

import org.threeten.extra.PeriodDuration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

String time1 = "2017-06-18 07:00:00"; // set time
String curtime = "2017-06-19 07:00:01"; // get the current time

DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime t1 = LocalDateTime.parse(time1, fmt);
LocalDateTime cur = LocalDateTime.parse(curtime, fmt);

PeriodDuration pd = PeriodDuration.between(t1, cur);

StringBuilder sb = new StringBuilder();
append(sb, pd.getPeriod().getYears(), "year");
append(sb, pd.getPeriod().getMonths(), "month");
append(sb, pd.getPeriod().getDays(), "day");
long seconds = pd.getDuration().getSeconds();
long hours = seconds / 3600;
append(sb, hours, "hour");
seconds -= (hours * 3600);
long minutes = seconds / 60;
append(sb, minutes, "minute");
seconds -= (minutes * 60);
append(sb, seconds, "second");

System.out.println(sb.toString()); // 1 day 1 second
当然,您也可以使用
org.threeten.bp
版本的相同代码创建
期间
持续时间

您可以使用Java-8作为to模型的一部分引入的和。在Java-9中,添加了一些更方便的方法

演示:

import java.time.Duration;
import java.time.LocalDateTime;
import java.time.Period;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("u-M-d H:m:s", Locale.ENGLISH);
        LocalDateTime startDateTime = LocalDateTime.parse("2017-06-18 07:00:00", dtf);

        // Use the following line for the curren date-time
        // LocalDateTime endDateTime = LocalDateTime.now(); 

        // Use the following line for a given end date-time string
        LocalDateTime endDateTime = LocalDateTime.parse("2017-06-19 07:00:01", dtf);

        Period period = startDateTime.toLocalDate().until(endDateTime.toLocalDate());
        Duration duration = Duration.between(startDateTime, endDateTime);

        // ############################ Java-8 ############################
        String periodDuration = String.format("%d Years %d Months %d Days %02d Hours %02d Minutes %02d Seconds",
                period.getYears(), period.getMonths(), period.getDays(), duration.toHours() % 24,
                duration.toMinutes() % 60, duration.toSeconds() % 60);
        System.out.println(periodDuration);
        // ############################ Java-8 ############################

        // ############################ Java-9 ############################
        periodDuration = String.format("%d Years %d Months %d Days %02d Hours %02d Minutes %02d Seconds",
                period.getYears(), period.getMonths(), period.getDays(), duration.toHoursPart(),
                duration.toMinutesPart(), duration.toSecondsPart());
        System.out.println(periodDuration);
        // ############################ Java-8 ############################
    }
}
0 Years 0 Months 1 Days 00 Hours 00 Minutes 01 Seconds
0 Years 0 Months 1 Days 00 Hours 00 Minutes 01 Seconds
输出:

import java.time.Duration;
import java.time.LocalDateTime;
import java.time.Period;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("u-M-d H:m:s", Locale.ENGLISH);
        LocalDateTime startDateTime = LocalDateTime.parse("2017-06-18 07:00:00", dtf);

        // Use the following line for the curren date-time
        // LocalDateTime endDateTime = LocalDateTime.now(); 

        // Use the following line for a given end date-time string
        LocalDateTime endDateTime = LocalDateTime.parse("2017-06-19 07:00:01", dtf);

        Period period = startDateTime.toLocalDate().until(endDateTime.toLocalDate());
        Duration duration = Duration.between(startDateTime, endDateTime);

        // ############################ Java-8 ############################
        String periodDuration = String.format("%d Years %d Months %d Days %02d Hours %02d Minutes %02d Seconds",
                period.getYears(), period.getMonths(), period.getDays(), duration.toHours() % 24,
                duration.toMinutes() % 60, duration.toSeconds() % 60);
        System.out.println(periodDuration);
        // ############################ Java-8 ############################

        // ############################ Java-9 ############################
        periodDuration = String.format("%d Years %d Months %d Days %02d Hours %02d Minutes %02d Seconds",
                period.getYears(), period.getMonths(), period.getDays(), duration.toHoursPart(),
                duration.toMinutesPart(), duration.toSecondsPart());
        System.out.println(periodDuration);
        // ############################ Java-8 ############################
    }
}
0 Years 0 Months 1 Days 00 Hours 00 Minutes 01 Seconds
0 Years 0 Months 1 Days 00 Hours 00 Minutes 01 Seconds
了解现代日期时间API

  • 无论出于何种原因,如果您必须坚持使用Java6或Java7,您可以使用哪个backport将大部分Java.time功能移植到Java6&7
  • 如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查并确认

请分享到目前为止您已经想到的代码。@Sufian我还没有键入代码,因为我被卡在哪里了start@dreq使用
compareTo
@dreq请进行一些搜索并努力解决问题。你会发现一些问题与你想要达到的目标非常相似。请同时阅读。感谢您提供的详细功能和代码,我将阅读您在上面给出的文档:)