传递TimeUnit并转换为毫秒

时间:2018-09-04 21:54:51

标签: java oop design-patterns timeunit

如何为用户通过TimeUnit的类创建API,例如分钟,秒,小时和一个数字,并将Millisec值保留在班级内部。
以下似乎是唯一的方法?

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

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

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

2 个答案:

答案 0 :(得分:2)

您可以按照经过测试的著名类java.time.LocalDate进行建模,该类提供了plus(long, TemporalUnit)方法。

类似地,您可以创建一个someMethod(long, TimeUnit)方法,该方法允许呼叫者传入任意数量的任何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);

答案 1 :(得分:1)

在我看来,您不需要发展自己的课程;您将重新发明轮子。我建议您使用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中的其他类很好地配合。

链接