如何获取长时间的相对时间,例如“12小时前”,就像图中突出显示的文字
val relative = DateUtils.getRelativeTimeSpanString(1616782398.0.toLong())
Log.d("Debug Elapsed", relative.toString())
我尝试使用 DateUtils 来实现此目的,但不起作用,因为结果是 1970 年 1 月 19 日
最佳答案
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 一起引入。 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
从 Trail: Date Time 了解有关现代日期时间 API 的更多信息。
关于java - 获取字符串格式的相对日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66824028/