日期添加计算中的Java"整数过大"

use*_*639 0 java integer date

我已经为我的问题取出了不相关的代码,并留下了与我的问题相关的内容.它表明整数太大了.我已将当前时间转换为毫秒,我试图以毫秒为单位添加一个月,两周和一周来实现"过期日期".如果有人知道如何使用Long而不是int?我很困惑,因为我的日期不是作为一个整数被宣布?

它表示'dateExpired = dateExpired + 2628000000;'的错误.

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

mk.*_*mk. 8

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果没有它们,编译器会将它们解释为int文字,但值对于int类型来说太大了.最大int可以使用值是2147483647(但最好不要在这样的情况下,混合型,只是在整个使用多头).

您还会遇到添加错误类型的问题.将dateExpired更改为a long(并将其转换为更Date晚版本),或使用此表单:

dateExpired = new Date(dateExpired.getTime() + 604800000L) 
Run Code Online (Sandbox Code Playgroud)

暂且不说,以后可能会帮助您记录大数字的含义:

dateExpired = dateExpired + 86400000L; // one day
Run Code Online (Sandbox Code Playgroud)