如何获取长时间的相对时间,例如“12小时前”,如这张图片中突出显示的文字
val relative = DateUtils.getRelativeTimeSpanString(1616782398.0.toLong())
Log.d("Debug Elapsed", relative.toString())
我尝试为此使用 DateUtils,但不起作用,因为结果是 1970 年 1 月 19 日
答案 0 :(得分:2)
Instant#ofEpochSecond
import java.time.Instant;
public class Main {
public static void main(String[] args) {
Instant instant = Instant.ofEpochSecond(1616782398L);
System.out.println(instant);
}
}
输出:
2021-03-26T18:13:18Z
您可以将 Instant
转换为其他类型,例如
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
Instant instant = Instant.ofEpochSecond(1616782398L);
// Replace ZoneId as applicable e.g. ZoneId.of("Europe/London")
ZonedDateTime zdt = instant.atZone(ZoneId.systemDefault());
// Print ZonedDateTime#toString
System.out.println(zdt);
// Print custom format
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("EEE dd, MMMM uuuu hh:mm:ss a z", Locale.ENGLISH);
System.out.println(dtf.format(zdt));
}
}
输出:
2021-03-26T18:13:18Z[Europe/London]
Fri 26, March 2021 06:13:18 PM GMT
如果您正在寻找两个 Instant
之间的持续时间,您可以使用 java.time.Duration
找到它,该 ISO-8601 standards 以 JSR-310 implementation 为模型并由 Java-8 引入 em> 作为 Trail: Date Time 的一部分。 Java-9 引入了一些更方便的方法。
演示:
import java.time.Duration;
import java.time.Instant;
public class Main {
public static void main(String[] args) {
// Instant derived from the given epoch seconds
Instant instant = Instant.ofEpochSecond(1616782398L);
// The current instant
Instant now = Instant.now();
// Duration between the two instants
Duration duration = Duration.between(instant, now);
// Print Duration#toString
System.out.println(duration);
// Custom format
// ####################################Java-8####################################
String formattedElapsedTime = String.format(
"%d Day %02d Hour %02d Minute %02d Second %d Millisecond %d Nanosecond", duration.toDays(),
duration.toHours() % 24, duration.toMinutes() % 60, duration.toSeconds() % 60,
duration.toMillis() % 1000, duration.toNanos() % 1000000000L);
System.out.println(formattedElapsedTime);
// ##############################################################################
// ####################################Java-9####################################
formattedElapsedTime = String.format("%d Day %02d Hour %02d Minute %02d Second %d Millisecond %d Nanosecond",
duration.toDaysPart(), duration.toHoursPart(), duration.toMinutesPart(), duration.toSecondsPart(),
duration.toMillisPart(), duration.toNanosPart());
System.out.println(formattedElapsedTime);
// ##############################################################################
}
}
示例运行:
PT2H44M15.040731S
0 Day 02 Hour 44 Minute 15 Second 40 Millisecond 40731000 Nanosecond
0 Day 02 Hour 44 Minute 15 Second 40 Millisecond 40731000 Nanosecond
从 {{3}} 了解有关现代日期时间 API 的更多信息。
答案 1 :(得分:1)
我不知道 DateUtil
是什么,但您可以简单地使用 java.time.Instant
和 Duration
:
import java.time.Duration;
import java.time.Instant;
public class Main {
public static void main(String[] args) {
Instant now = Instant.now();
Instant instant = Instant.ofEpochMilli(1616782398);
Duration d = Duration.between(now, instant);
System.out.println(d);
}
}
然后您可以使用 get
上的 Duration
方法来检索所需的值并根据需要对其进行格式化。
作为替代方案,您可以像这样使用 ChronoUnit
来获得类似的结果:
ChronoUnit.HOURS.between(now, instant)