2012-02-15 85 views
1

對於任務,我必須在發票日期後30天的到期日編碼。當我運行我的程序時,我沒有得到正確的日期。我不確定我做錯了什麼。任何幫助,將不勝感激。從類毫秒日期未返回預期結果

代碼創建和格式截止日期:

// a method that returns the due date 
public Date getDueDate() 
{ 
    Date dueDate = new Date(invoiceDate.getTime() + 
      (30 * 24 * 60 * 60 * 1000)); 
    return dueDate; 
} 

// a method that returns the formatted due date 
public String getFormattedDueDate() 
{ 
    DateFormat shortDueDate = DateFormat.getDateInstance(DateFormat.SHORT); 
    return shortDueDate.format(this.getDueDate()); 
} 

從主類代碼它調用getFormattedDueDate:

public static void displayInvoices() 
{ 
    System.out.println("You entered the following invoices:\n"); 
    System.out.println("Number\tTotal\tInvoice Date\tDue Date"); 
    System.out.println("------\t-----\t------------\t--------"); 
    double batchTotal = 0; 
    int invoiceNumber = 1; 
    while (invoices.size() > 0) 
    { 
     Invoice invoice = invoices.pull(); 
     System.out.println(invoiceNumber + "\t  " + invoice.getFormattedTotal() 
       + "  " + invoice.getFormattedDate() 
       + "\t  " + invoice.getFormattedDueDate()); 

     invoiceNumber++; 
     batchTotal += invoice.getInvoiceTotal(); 
    } 
+0

你得到了什麼結果?你期望的結果是什麼? – wallyk 2012-02-15 01:56:54

+0

發票日期是今天,我預計2012年3月15日。返回的日期是2012年1月25日 – gcalan 2012-02-15 01:59:00

+0

coderanch上的海報爲我提供了答案。我想我會在這裏添加它,以防其他人有類似的問題。在發票日期增加30天的計算中,應爲「(30L * 24 * 60 * 60 * 1000)」。我測試了它,這確實有效。我不確定什麼「L」完成,但會查找它。 – gcalan 2012-02-15 02:19:25

回答

1

一般來說這是壞到這樣的執行日期數學,IMO。這樣做:

 
public Date getDueDate() { 
    Calendar cal = Calendar.getInstance(); 
    cal.setTime(invoiceDate); 
    cal.add(Calendar.DAY_OF_MONTH, 30); 
    return cal.getTime(); 
} 
+0

感謝brettw。我會玩你提供的代碼。 – gcalan 2012-02-15 02:28:48