我编写了一种方法,可以将给定的数字从几天转换为毫秒:
private long expireTimeInMilliseconds;
...
public void setExpireTimeInDays(int expireTimeInDays)
{
expireTimeInMilliseconds = expireTimeInDays * 24 * 60 * 60 * 1000;
}
我很难找出我做错了什么。现在我的问题是:
该错误是如此明显吗?
更正的方法:
private long expireTimeInMilliseconds;
...
public void setExpireTimeInDays(int expireTimeInDays)
{
expireTimeInMilliseconds = ((long) expireTimeInDays) * 24 * 60 * 60 * 1000;
}
如果在计算之前不将整数转换为很长的时间,则会得到完全错误的结果。
最佳答案
很明显吗?我猜这取决于您使用Java多长时间以及必须处理多少毫秒。当然,最多可以保留24天左右...
我认为最大的提示应该是System.currentTimeMillis()
返回long
。这很好地表明了毫秒数可能会变大。您要设置的变量的类型也应该是一个很好的提示。
当然,您还必须了解,如果使用int进行算术运算,则结果将是int
,并在溢出时进行环绕。是否足够明显尚有争议,但这将是毫无意义的讨论。在C#中,如果您打开了溢出检查功能,您会很快发现该错误-但随后很少有开发人员这样做(实际上,我可能不会这样做)。