当前位置: 首页 > 知识库问答 >
问题:

时间:比较两个瞬间--获得两个瞬间之间的小时数、分钟数、秒数、年数、月数[重复]

滕学义
2023-03-14
public class TimePassed {
    private long seconds;
    private long minutes;
    private long hours;
    private long days;
    private long years;
    ...

    public TimePassed(double unixSeconds)  {
        Instant now = Instant.now();
        Instant ago = Instant.ofEpochSecond((long) unixSeconds);

        this.seconds = ChronoUnit.SECONDS.between(
            ago.atZone(ZoneId.systemDefault()),
            now.atZone(ZoneId.systemDefault()));  //6100
        this.minutes = ChronoUnit.MINUTES.between(
            ago.atZone(ZoneId.systemDefault()),
            now.atZone(ZoneId.systemDefault()));  //101
        this.hours = ChronoUnit.HOURS.between(
            ago.atZone(ZoneId.systemDefault()),
            now.atZone(ZoneId.systemDefault()));  //1
        this.days = ChronoUnit.DAYS.between(
            ago.atZone(ZoneId.systemDefault()),
            now.atZone(ZoneId.systemDefault()));  //0
        this.years = ChronoUnit.YEARS.between(
            ago.atZone(ZoneId.systemDefault()),
            now.atZone(ZoneId.systemDefault()));  //0
    }
}

共有1个答案

阎晔
2023-03-14

基本思想,不完整:

    Duration dur = Duration.between(ago, now);

    this.seconds = dur.toSecondsPart(); // 40
    this.minutes = dur.toMinutesPart(); // 41
    this.hours = dur.toHoursPart(); // 1
    this.days = dur.toDaysPart(); // 0

与你的问题相隔6100个seoncd的瞬间测试。Java9中引入了TOXXXPart方法。对于Java8(或ThreeTen Backport),您将需要从较粗的单元开始,即天数,并在得到下一个较细的单元之前从持续时间中减去天数。请参见lauhub的一个示例

不过,要完全正确地计算年份和天数有点困难。为了只获得超过全年的天数,这里有完整的代码:

    ZoneId zone = ZoneId.systemDefault();
    ZonedDateTime agoZdt = ago.atZone(zone);
    ZonedDateTime nowZdt = now.atZone(zone);
    this.years = ChronoUnit.YEARS.between(agoZdt, nowZdt);
    ZonedDateTime afterWholeYears = agoZdt.plusYears(this.years);

    Duration dur = Duration.between(afterWholeYears, nowZdt);

    this.seconds = dur.toSecondsPart(); // 40
    this.minutes = dur.toMinutesPart(); // 41
    this.hours = dur.toHoursPart(); // 1
    this.days = dur.toDays(); // 0
 类似资料:
  • 我试图建立一个函数,检查一个单词或文本是否是回文。要做到这一点,它拆分文本,使每个字母都是一个新数组的元素,它去掉空白,并建立反向数组。然后检查两个数组中处于相同位置的每个元素是否相等。如果不是,则返回false,如果是,则返回true。这里的函数是: 我不知道出了什么问题,但是不管我传递给函数什么单词或文本,函数似乎都在返回一个真值。那有什么不好?

  • 我有两次约会。一个是以YYYYMMDD格式从其他应用程序的表中检索的,第二个日期是本地时间,我需要这两个日期之间的天数/月/年。 我试过了 但这给了我一些乱七八糟的数字。 变量$t=Fri Dec31 00:00:00 9999 变量$今天=Wed Feb19 14:40:55 2020 产出:25182094888 有什么想法吗?提前谢谢。

  • 在Symfony 2中有两个日期时间格式的字段。现在我想得到提交表单后的总小时数 实体php 显示html 这将抛出一个错误 在呈现模板期间引发异常(“DateTime::_construct()希望参数1为字符串,对象为给定的”)在。。。 你如何简单地得到同一天两个小时之间的小时数?

  • 问题内容: 我试图获取当前日期与PHP 调用中的日期之间的差异,例如:。如何获得两个日期之间的时间差。我想有一个比较两个日期的函数,然后返回分钟,返回小时和返回天等等。 我应该怎么做? 编辑:当前接受的答案已经完全做了我想要做的。我建议您以方便使用的方式获取它,以便以PHP 函数使用的形式获取两个日期之间的时间。如果您对PHP不太熟悉,那么这是从1970年1月1日开始的秒数。这对于PHP后端非常有

  • 我需要像这样显示一个月内和前一个月一个动作所用的总小时数: 我有一个SQL表,格式如下: 查询会是什么样子? 编辑: ツ的答案让我朝着正确的方向前进,但是我使用JOIN解决了这个问题。请参阅下面的解决方案。

  • 假设A有两个日期(开始时间) 例如。 感谢帮助。