【问题标题】:How can I find the difference between the two times?我怎样才能找到两次之间的差异?
【发布时间】:2018-12-21 09:29:19
【问题描述】:

我像这样2018-11-27T09:51:31.832107+00:00从服务器获取时间,然后我解析时间所以OffsetDateTime.parse。我想区分两次OffsetDateTime.now - OffsetDateTime.parse

减法后,我必须以这种形式显示经过的时间:14 min 12 seconds。我怎样才能正确地获得时间跨度?

【问题讨论】:

  • 您搜索/尝试过什么吗?
  • @OleV.V.减法后,我必须以这种形式显示时间14 min 12 seconds
  • 感谢您增加的精确度,它使回答问题变得更加容易。添加信息时,请在问题本身中添加信息,以便我们将所有内容集中在一个地方(这次我为您完成了)。

标签: java android date time


【解决方案1】:

知道怎么做就很容易了:

// Parse input.
String timeFromServer = "2018-11-27T09:51:31.832107+00:00";
OffsetDateTime odt = OffsetDateTime.parse(timeFromServer);

// Capture the current moment. 
OffsetDateTime now =  OffsetDateTime.now(ZoneOffset.UTC)

// Get the difference
Duration difference = Duration.between(odt,now);

// Extract details: Convert to minutes and seconds
long minutes = difference.toMinutes();
difference = difference.minusMinutes(minutes);
long seconds = difference.getSeconds();

// Format into string in desired form
String formattedDiff = String.format("%d min %d seconds", minutes, seconds);
System.out.println(formattedDiff);

现在运行时,由于您的示例字符串来自上个月,因此我们得到了大量的分钟数。

34613 分 38 秒

唯一棘手的部分是从Duration 对象中分离出分钟和秒。我先取出分钟,然后减去它们,所以只剩下秒(和更小)。从 Java 9 开始,Duration 改进了对获取单个时间单位的支持(请参阅 to…Part 方法),但我想你还不能在 Android 上使用它。

当它仅用于计算差异时,传递给OffsetDateTime.now的时区或偏移量无关紧要。

【讨论】:

    【解决方案2】:

    在 android 中,您有一个称为“比较”的方法,它可能会对您有所帮助,请参阅此处的文档:

    https://developer.android.com/reference/java/time/OffsetDateTime#compareTo(java.time.OffsetDateTime)

    【讨论】:

      【解决方案3】:

      以毫秒为单位转换两次,然后从第一毫秒减去第二毫秒,然后将结果格式化为口头日期。

      【讨论】:

      • 坏主意。找到差异的方法是内置的。
      • 为什么你说这是个坏主意??
      • 帮助可能会觉得这可能是个好主意的读者。
      • 可能有一些内置功能,但在那之后我认为这也不是一个坏主意。因为在内置函数中,事情和上面一样。
      猜你喜欢
      • 1970-01-01
      • 2020-06-07
      • 1970-01-01
      • 2022-12-12
      • 2020-06-01
      • 1970-01-01
      • 2023-03-05
      • 2023-01-30
      • 1970-01-01
      相关资源
      最近更新 更多