java - Joda Time 操纵

标签 java jodatime

我有一个用例可以让时间过得更快,即我想按一个因子(正整数)更改时钟。因此,如果我将其更改为 2 倍,那么 1 秒将有 500 毫秒,1 分钟将有 30 秒,依此类推。

如何在 jodatime 中实现此目的?

最佳答案

从什么时候开始你要把时间加倍?

例如,如果您使用

import org.joda.time;

Instant doubleTime(Instant instant) {
    return new Instant(instant.getMillis() * 2);
}

自 1970 年以来,时间刚刚增加了一倍。

您可能想要选择时间何时开始加倍。

Instant doubleTime(Instant start, Instant end) {
    Long s = start.getMillis();
    Long e = end.getMillis();

    return new Instant((e - s) * 2 + s);
}

这将使您的结束时间比开始时间加倍。

使用 Duration 可以更简单地完成同样的技巧:

Duration doubleTime(Duration duration) {
    return new Duration(duration.getMillis() * 2);
}   

这更简单,因为 Duration 不知道它何时开始或结束。到底过了多久。

请记住,时间从来都不是简单的事情。当你做这样的事情时,很多微妙的事情都会被忽略。闰年、闰秒等。如果这就是您想要的,那没问题,但如果将一年翻倍并不能完美地给您两年,请不要表现出惊讶。

关于java - Joda Time 操纵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29448621/

相关文章:

Java 扫描器仅读取文件的第一行

java - 使用 joda-time 解析包含时区的日期字符串

java - 获取 23 :00 of the previous day when converting LocalDate to Timestamp

java - 将插件资源文件分发到宿主项目

class - 在哪里可以找到标准 Java 类的代码?

JavaFX WebView 无法与 Spring Boot Maven 一起使用

java - 从 Joda 时间迁移到 Java 8 DateTime

java - JodaTime:用 +00:00 代替 Z 的日期时间

java - 为什么 JodaTime BaseInterval 的结束必须大于开始?

java - 我应该如何从缓冲阅读器中读取内容?