【问题标题】:Get relative date time in string format以字符串格式获取相对日期时间
【发布时间】:2021-06-23 16:49:11
【问题描述】:

如何获取较长时间的相对时间,例如“12小时前”,如这张图片中突出显示的文字

val relative = DateUtils.getRelativeTimeSpanString(1616782398.0.toLong())
Log.d("Debug Elapsed", relative.toString())

我尝试为此使用 DateUtils,但由于结果是 1970 年 1 月 19 日,所以不起作用

【问题讨论】:

标签: java datetime kotlin


【解决方案1】:

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

如果您正在寻找两个 Instants 之间的持续时间,您可以使用 java.time.Duration 找到它,它以 ISO-8601 standards 为模型,并作为 @ 的一部分引入 Java-8 987654324@。 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 的更多信息。

【讨论】:

    【解决方案2】:

    我不知道DateUtil 是什么,但您可以简单地使用java.time.InstantDuration

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

    然后您可以使用Duration 上的get 方法来检索您想要的值并根据需要设置它们的格式。

    您也可以像这样使用ChronoUnit 来获得类似的结果:

    ChronoUnit.HOURS.between(now, instant)
    

    【讨论】:

      猜你喜欢
      • 2017-02-03
      • 1970-01-01
      • 1970-01-01
      • 2014-08-10
      • 1970-01-01
      • 2014-09-28
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      相关资源
      最近更新 更多