首页
学习
活动
专区
圈层
工具
发布

Java毫秒
EN

Stack Overflow用户
提问于 2012-02-04 15:16:36
回答 9查看 48.3K关注 0票数 28

我正在Java中使用毫秒进行一些日期计算,并注意到以下问题:

代码语言:javascript
复制
private static final int MILLIS_IN_SECOND = 1000;
    private static final int SECONDS_IN_MINUTE = 60;
    private static final int MINUTES_IN_HOUR = 60;
    private static final int HOURS_IN_DAY = 24;
    private static final int DAYS_IN_YEAR = 365; //I know this value is more like 365.24...
    private static final long MILLISECONDS_IN_YEAR = MILLIS_IN_SECOND * SECONDS_IN_MINUTE * MINUTES_IN_HOUR * HOURS_IN_DAY * DAYS_IN_YEAR;


System.out.println(MILLISECONDS_IN_YEAR);  //Returns 1471228928

我知道这一年是= 31,556,952,000毫秒,所以我的乘法是不存在的。

有人能指出我做错了什么吗?我应该用很长时间吗?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2012-02-04 15:21:25

我应该用很长时间吗?

是。问题是,由于MILLIS_IN_SECOND等都是ints,所以当您将它们相乘时,就会得到一个int。您正在将该int转换为long,但只有在int乘法已经导致错误答案之后。

要解决这个问题,可以将第一个转换为long

代码语言:javascript
复制
    private static final long MILLISECONDS_IN_YEAR =
        (long)MILLIS_IN_SECOND * SECONDS_IN_MINUTE * MINUTES_IN_HOUR
        * HOURS_IN_DAY * DAYS_IN_YEAR;
票数 32
EN

Stack Overflow用户

发布于 2014-03-30 11:29:57

如果在android上,我建议:

android.text.format.DateUtils

代码语言:javascript
复制
DateUtils.SECOND_IN_MILLIS
DateUtils.MINUTE_IN_MILLIS
DateUtils.HOUR_IN_MILLIS
DateUtils.DAY_IN_MILLIS
DateUtils.WEEK_IN_MILLIS
DateUtils.YEAR_IN_MILLIS
票数 25
EN

Stack Overflow用户

发布于 2013-01-06 21:05:57

虽然其他人已经指出了算术溢出,但是您也可以尝试TimeUnit来解决这个问题:

代码语言:javascript
复制
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
int daysInYear = calendar.getActualMaximum(Calendar.DAY_OF_YEAR);
System.out.println(TimeUnit.DAYS.toMillis(daysInYear));
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9141871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档