the*_*dam 117
如果你不在你的项目中包含joda-time,我会选择java TimeUnit.您不需要包含外部库,它非常简单.
每当你需要那些"讨厌的常数"时,你通常需要它们多个数字来进行跨单元转换.相反,您可以使用TimeUnit简单地转换值而无需显式乘法.
这个:
long millis = hours * MINUTES_IN_HOUR * SECONDS_IN_MINUTE * MILLIS_IN_SECOND;
Run Code Online (Sandbox Code Playgroud)
成为这个:
long millis = TimeUnit.HOURS.toMillis(hours);
Run Code Online (Sandbox Code Playgroud)
如果您公开一个接受某些值的方法,比如millis然后需要转换它,那么最好遵循java并发API的作用:
public void yourFancyMethod(long somePeriod, TimeUnit unit) {
int iNeedSeconds = unit.toSeconds(somePeriod);
}
Run Code Online (Sandbox Code Playgroud)
如果你真的非常需要常数,你仍然可以通过调用以下方式获得一小时内的秒数:
int secondsInHour = TimeUnit.HOURS.toSeconds(1);
Run Code Online (Sandbox Code Playgroud)
Ode*_*ner 34
如果在Android上,我建议:
DateUtils.SECOND_IN_MILLIS
DateUtils.MINUTE_IN_MILLIS
DateUtils.HOUR_IN_MILLIS
DateUtils.DAY_IN_MILLIS
DateUtils.WEEK_IN_MILLIS
DateUtils.YEAR_IN_MILLIS
Run Code Online (Sandbox Code Playgroud)
Mat*_*ulc 28
作为替代方案TimeUnit
,您可能出于某种原因更喜欢java.time包中的Duration类:
Duration.ofDays(1).getSeconds() // returns 86400;
Duration.ofMinutes(1).getSeconds(); // 60
Duration.ofHours(1).toMinutes(); // also 60
//etc.
Run Code Online (Sandbox Code Playgroud)
此外,如果您更深入并分析了Duration.ofDays(..)方法的工作原理,您将看到以下代码:
return create(Math.multiplyExact(days, SECONDS_PER_DAY), 0);
Run Code Online (Sandbox Code Playgroud)
哪个SECONDS_PER_DAY
是来自LocalTime类的包保护的静态常量.
/**
* Seconds per day.
*/
static final int SECONDS_PER_DAY = SECONDS_PER_HOUR * HOURS_PER_DAY;
//there are also many others, like HOURS_PER_DAY, MINUTES_PER_HOUR, etc.
Run Code Online (Sandbox Code Playgroud)
我认为可以安全地假设,如果有任何软件包,它会定义"所有烦人的时间常数,如毫秒/秒/分钟",我相信Java SDK开发人员会使用它们.
为什么这个LocalTime
常量包被保护而不是公开这是一个好问题,我相信这是有原因的.现在看起来你真的必须复制它们并自己维护.
Bri*_*new 23
Joda-Time包含诸如Days之类的类,其中包含诸如toStandardSeconds()之类的方法.所以你可以写:
int seconds = Days.ONE.toStandardSeconds();
Run Code Online (Sandbox Code Playgroud)
虽然它看起来有点冗长,但也许只适用于更复杂的场景,如闰年等.
Lin*_*ond 11
Joda Time还有一个DateTimeConstants
类,包括MILLIS_PER_SECOND,SECONDS_PER_MINUTE,MILLIS_PER_DAY等等.
这是我用来获取毫秒的方法。
import javax.management.timer.Timer;
Timer.ONE_HOUR
Timer.ONE_DAY
Timer.ONE_MINUTE
Timer.ONE_SECOND
Timer.ONE_WEEK
Run Code Online (Sandbox Code Playgroud)
虽然本答案TimeUnit
中的讨论和本答案中的讨论可能更直接地解决了问题,但 Java 中还有一些其他方便的时间单位功能。Duration
对于单位,请参阅ChronoUnit
枚举:
FOREVER
ERAS
MILLENNIA
CENTURIES
DECADES
YEARS
MONTHS
WEEKS
DAYS
HALF_DAYS
HOURS
MINUTES
SECONDS
MILLIS
MICROS
NANOS
java.time包具有复杂的DayOfWeek
和枚举Month
。因此,您可以传递成熟的对象,例如DayOfWeek.TUESDAY
或 ,而不是仅仅传递数字或字符串Month.FEBRUARY
。
MonthDay
java.time 框架还包括、YearMonth
、 和 等类Year
。同样,您可以传递成熟的对象而不仅仅是数字或字符串,以使您的代码更加自记录,确保有效值并提供类型安全。
TimeUnit
和之间的转换ChronoUnit
我们可以轻松地在TimeUnit
和之间进行转换ChronoUnit
。请参阅添加到旧类中的新方法TimeUnit
。
ThreeTen -Extra项目提供了与 java.time 一起使用的附加类。其中包括:DayOfMonth
、DayOfYear
、AmPm
、Quarter
、YearQuarter
、YearWeek
、Days
、Weeks
、Months
、Years
和Interval
。
归档时间: |
|
查看次数: |
39181 次 |
最近记录: |