如何为用户通过TimeUnit
的类创建API,例如分钟,秒,小时和一个数字,并将Millisec值保留在班级内部。
以下似乎是唯一的方法?
void someMethodDays(int numOfDays) {
this.longValue = TimeUnit.DAYS.toMillis(numOfDays);
}
void someMethodHour(int numOfHours) {
this.longValue = TimeUnit.HOURS.toMillis(numOfDays);
} etc
这是唯一的方法吗?每个值都有一个描述性名称的方法?
答案 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中的其他类很好地配合。