一年中的 Java 毫秒数

标签 java

我在 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

我知道 1 年大约 = 31,556,952,000 毫秒,所以我的乘法以某种方式关闭了。

谁能指出我做错了什么?我应该使用long吗?

最佳答案

Should I be using a long?

是的。问题是,由于 MILLIS_IN_SECOND 等等都是 int,当你将它们相乘时,你会得到一个 int。您正在将该 int 转换为 long,但只有 after 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;

关于一年中的 Java 毫秒数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9141871/

相关文章:

java - 更改给定字符串中字母的大小

java - 为什么这个图形对象不绘画? (我究竟做错了什么?)

java - 尝试读取 java 中的字符数组

java - 将 HTTP 请求重定向到不同的服务器

java - 当文档以小写 <!doctype 开头时, Karate HTML 解析抛出 SaxException

java - Java中有一个队列,当调用poll时会等待一个对象?

java - 程序效率和java.lang.OutOfMemoryError : Java heap space

java - 什么是类路径以及如何设置它?

java - 天堂操作系统 : Tasker Java Function "setActiveProfile(java.lang.String)"

java - 当鼠标位于组件外部时,如何获取单击时的鼠标位置?