我正在Java中使用毫秒进行一些日期计算,并注意到以下问题:
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毫秒,所以我的乘法是不存在的。
有人能指出我做错了什么吗?我应该用很长时间吗?
发布于 2012-02-04 15:21:25
我应该用很长时间吗?
是。问题是,由于MILLIS_IN_SECOND等都是ints,所以当您将它们相乘时,就会得到一个int。您正在将该int转换为long,但只有在int乘法已经导致错误答案之后。
要解决这个问题,可以将第一个转换为long
private static final long MILLISECONDS_IN_YEAR =
(long)MILLIS_IN_SECOND * SECONDS_IN_MINUTE * MINUTES_IN_HOUR
* HOURS_IN_DAY * DAYS_IN_YEAR;发布于 2014-03-30 11:29:57
如果在android上,我建议:
android.text.format.DateUtils
DateUtils.SECOND_IN_MILLIS
DateUtils.MINUTE_IN_MILLIS
DateUtils.HOUR_IN_MILLIS
DateUtils.DAY_IN_MILLIS
DateUtils.WEEK_IN_MILLIS
DateUtils.YEAR_IN_MILLIS发布于 2013-01-06 21:05:57
虽然其他人已经指出了算术溢出,但是您也可以尝试TimeUnit来解决这个问题:
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
int daysInYear = calendar.getActualMaximum(Calendar.DAY_OF_YEAR);
System.out.println(TimeUnit.DAYS.toMillis(daysInYear));https://stackoverflow.com/questions/9141871
复制相似问题