3

如何为用户传递TimeUnit例如分钟、秒、小时和数字的类创建 API,并在类内部保留毫秒值。
以下似乎是唯一的方法?

void someMethodDays(int numOfDays) {  
   this.longValue = TimeUnit.DAYS.toMillis(numOfDays);  
}  

void someMethodHour(int numOfHours) {  
   this.longValue = TimeUnit.HOURS.toMillis(numOfDays);  
} etc  

这是唯一的方法吗?每个值的方法具有参数的描述性名称?

4

2 回答 2

2

java.time.LocalDate您可以在提供plus(long, TemporalUnit)方法的知名且经过测试的类之后为您的类建模:

同样,您可以创建一个someMethod(long, TimeUnit)方法,允许调用者传入任意数量的 any TimeUnit

void someMethod(long amount, TimeUnit unit) {
    this.longValue = unit.toMillis(amount);
}

请注意,LocalDate 它还提供了用于添加某些常见时间单位的专用方法,例如plusDays(). 这使调用者能够决定哪个对他们正在编写的代码更清晰:

LocalDate tomorrow = today.plusDays(1);
LocalDate tomorrow = today.plus(1, TimeUnit.DAYS);
于 2018-09-04T22:09:43.313 回答
2

在我看来,您不需要开发自己的课程;你将重新发明轮子。我建议你使用这个Duration类。

从某个时间单位转换为Duration

    System.out.println(Duration.of(3, ChronoUnit.HOURS));

或者:

    System.out.println(Duration.ofHours(3));

两种情况下的输出相同:

PT3H

它的打印有点有趣;这意味着时间跨度为 3 小时。格式为ISO 8601

    System.out.println(Duration.of(2, ChronoUnit.DAYS));

PT48H

48小时; 这是正确的。

    System.out.println(Duration.of(327864523, ChronoUnit.MICROS));

PT5M27.864523S

跨度为 5 分 27.864523 秒。

如果需要转换为毫秒,方法内置:

    Duration dur = Duration.of(284, ChronoUnit.MINUTES);
    System.out.println("" + dur.toMillis() + " milliseconds");

17040000 毫秒

Duration是现代 Java 日期和时间 API java.time 的一部分,当然可以与该 API 中的其他类一起使用。

链接

于 2018-09-05T10:31:11.947 回答