有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java获取字符串格式的相对日期时间

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

enter image description here

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

我试着用DateUtils来做这个,但不起作用,因为结果是1970年1月19日


共 (2) 个答案

  1. # 1 楼答案

    我不知道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)
    
  2. # 2 楼答案

    ^{}

    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之间的持续时间,您可以使用^{}找到它,该^{}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的更多信息