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,请检查并确认
compareTo
@dreq请进行一些搜索并努力解决问题。你会发现一些问题与你想要达到的目标非常相似。请同时阅读。感谢您提供的详细功能和代码,我将阅读您在上面给出的文档:)