日期添加计算中的 Java "Integer number too large"



我已经为我的问题去掉了不相关的代码,并留下了与我的问题相关的代码。它说明Integer太大。我已将当前时间转换为毫秒,并尝试添加一个月、2周和1周(以毫秒为单位)以实现"过期日期"。如果有人知道我会如何使用Long而不是int?我很困惑,因为我的Date没有被声明为Integer?

它在'dateExpired=dateExpired+22628000000;'处声明错误。

public class VIP implements Serializable {
    private Date dateExpired;
    public VIP(Date dateExpired) {
        this.dateExpired = new Date(Calendar.getInstance().getTimeInMillis());
    }

    public Date getDateExpired() {
        return dateExpired;
    }
    public void setDateExpired(String ticketType) {
       if (ticketType.equals("Gold")) {
            dateExpired =  dateExpired + 2628000000;
        } else if (ticketType.equals("Silver")) {
            dateExpired = dateExpired + 1209600000;
        } else {
            dateExpired = dateExpired + 604800000;
        }
    }
}

在数字后面添加标记L,将其转换为long文字:

public void setDateExpired(String ticketType) {
   if (ticketType.equals("Gold")) {
        dateExpired = dateExpired + 2628000000L;
    } else if (ticketType.equals("Silver")) {
        dateExpired = dateExpired + 1209600000L;
    } else {
        dateExpired = dateExpired + 604800000L;
    }
}

如果没有它们L,编译器会将它们解释为int文字,但这些值对于int类型来说太大了。您可以使用的最大int值是2147483647(尽管在这种情况下最好不要混合类型,而是始终使用long)。

您还会遇到添加不正确类型的问题。将dateExpired更改为long(稍后将其转换为Date),或者使用以下形式:

dateExpired = new Date(dateExpired.getTime() + 604800000L) 

顺便说一句,它可能会帮助你以后记录大数字的含义:

dateExpired = dateExpired + 86400000L; // one day

不能将Date对象添加到Long object

使用

public void setDateExpired(String ticketType) {
   if (ticketType.equals("Gold")) {
        dateExpired =  new Date(dateExpired.getTime() + 2628000000L);
    } else if (ticketType.equals("Silver")) {
        dateExpired = new Date(dateExpired.getTime() + 1209600000L);
    } else {
        dateExpired = new Date(dateExpired.getTime() + 604800000L);
    }
}

相关内容

最新更新