【问题标题】:Do we have a TimeSpan sort of class in Java我们在 Java 中有一个 TimeSpan 类的类吗
【发布时间】:2011-07-05 11:02:35
【问题描述】:

我只是想知道java.util 中是否需要 TimeSpan,以便我可以定义这两个时间之间的小时、分钟和秒数。

从这个TimeSpan我们可以有两个时间间隔。喜欢

TimeSpan getTimeSpan( Date before, Date after ){...}

long timeSpan = System.currentTimeMillis();
// ... long job
timeSpan = System.currentTimeMillis() - timeSpan;

TimeSpan ts = new TimeSpan(timeSpan);

有了这个TimeSpan,我们可以在SimpleDateFormat中使用它。

SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
format.format( timsSpan );

我不确定这是否已经在 J​​ava 中实现但尚未被我发现。

【问题讨论】:

    标签: java timespan java.util.date


    【解决方案1】:

    SDK 中的 JDK 8 日期时间库已经丰富,您可以使用

    DurationPeriod

    来自 JodaTime 的Interval 可以..

    一个时间间隔代表一段时期 两个瞬间之间的时间。间隔 包括开始时刻和 不包括结束。结束瞬间 总是大于或等于 立即开始。

    间隔有一个固定的毫秒 期间。这就是区别 在开始和结束时刻之间。 持续时间分别表示 通过 ReadableDuration。因此, 间隔没有可比性。至 比较两个区间的长度, 你应该比较他们的持续时间。

    区间也可以转换为 可读周期。这代表了 开始和结束的区别 在领域方面的点,例如 年日。

    Interval 是线程安全且不可变的。

    【讨论】:

    • 我喜欢JodaTimeInterval。但我想知道为什么标准库中还没有提出这样的实用程序。由于使用非常普遍。
    • 可能joda时间很快会添加到标准库中
    • 这实际上发生了,请参阅下面的我的回答以及在此处回答此问题的文档:docs.oracle.com/javase/8/docs/api/java/time/Period.html
    • 很高兴看到这件事发生了,我在 2011 年就预见到了 :)
    【解决方案2】:

    在 Java 8 中,标准 API 中添加了一个适当的时间库(这在很大程度上基于 JodaTime)。

    其中有两个类可以用来表示句点:

    1. Duration 表示时间跨度的秒或纳秒长度。
    2. Period 表示对用户更友好的差异,存储为“x 年和 y 月等”。

    他们之间的区别详细解释可以看Java tutorial

    【讨论】:

      【解决方案3】:

      如果您使用的是 Java 8(或更高版本),或者只是不想导入 JodaTime(JodaTime 的作者本人 suggest migrating 到 java.time):Java 8 通过 Periods 提供该功能,请参阅这里有教程:https://docs.oracle.com/javase/tutorial/datetime/iso/period.html

      让我在这里引用 Oracle 教程:

      LocalDate today = LocalDate.now();
      LocalDate birthday = LocalDate.of(1960, Month.JANUARY, 1);
      
      Period p = Period.between(birthday, today);
      long p2 = ChronoUnit.DAYS.between(birthday, today);
      System.out.println("You are " + p.getYears() + " years, " + p.getMonths() +
                         " months, and " + p.getDays() +
                         " days old. (" + p2 + " days total)");
      

      代码产生类似于以下的输出:

      You are 53 years, 4 months, and 29 days old. (19508 days total)
      

      【讨论】:

        【解决方案4】:

        如果您正在寻找更轻量级的替代版本,请查看我编写的用于我自己的 Android 应用程序的这个库。 https://github.com/ashokgelal/samaya

        抱歉,我没有关于它的使用的任何文档,但它与对应的 .net Timespan 类非常相似。此外,还有一些单元测试,其中包含许多关于如何使用它的示例。

        【讨论】:

          猜你喜欢
          • 2021-10-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多