2012-03-13 21 views
3

美好的一天。 我只想問一個給定的日期添加日期。 我有一個jtexfield(txtStart)和另一個jtexfield(txtExpiry)。 我需要在txtStart中的日期後102天后在txtExpiry中顯示日期。 我正在使用KEYRELEASED事件。在我輸入txtStart之後,額外102天的日期將出現在txtExpiry中。如何在字符串數據類型的jtextfield中給出的日期添加天數

這是我的代碼,但它仍然是錯誤的。

private void txtStartKeyReleased(java.awt.event.KeyEvent evt) { 
// TODO add your handling code here: 
    // set calendar to 1 Jan 2007 
    int a = Integer.parseInt(txtStart.getText());  
    Calendar calendar = new GregorianCalendar(a,a,a); 

    calendar.add(Calendar.DAY_OF_MONTH,102); 
    PrintCalendar(calendar); 
    } 

    private void PrintCalendar(Calendar calendar){ 
     // define output format and print 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");   
     String date = sdf.format(calendar.getTime()); 
     long add = Date.parse(date); 
     txtExpiry.setText(add); -----> this part here also has an error. 
    } 

我的代碼仍然不會在txtExpiry中生成日期。在此先感謝

這裏是接受幫助後,正確的代碼:

private void txtStartKeyReleased(java.awt.event.KeyEvent evt) { 
     try {  

     Date date1; 
     date1 = new SimpleDateFormat("yyyy-MM-dd").parse(txtStart.getText()); 
     System.out.println(date1); 

     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
     Calendar cal = Calendar.getInstance(); 
         cal.setTime(date1); 
         cal.add(Calendar.DATE, 102); 
         String expDateString = sdf.format(cal.getTime()); 
         txtExpiry.setText(expDateString); 
    }catch (ParseException ex) { 
     Logger.getLogger(ClientInfo.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 
+0

什麼拋出的錯誤? setText方法不只是一個String參數嗎?看起來你已經很久了。 – bsimic 2012-03-13 19:08:05

+0

錯誤--->方法setText不能應用於給定的數據類型。我應該使用什麼?我需要把輸出放在txtExpiry – zairahCS 2012-03-13 19:14:01

+0

你應該能夠把你的日期變量(這是一個字符串)並傳遞給你的txtExpiry.setText(日期)。 – bsimic 2012-03-13 19:21:20

回答

7

使用

yyyy-MM-dd 

注:資本MM

參見:SimpleDateFormat

現在,一旦你有數據E時,你可以使用Calendar做天算術

Calendar cal = Calendar.getInstance(); 
cal.setTime(parsedDate); 
cal.add(Calendar.DATE, 102); 
String expDateString = dateFormatter.format(cal.getTime()); 
+0

int a = Integer.parseInt(txtStart.getText()); Calendar calendar = new GregorianCalendar(a,a,a); 這部分我認爲也是錯誤的。因爲我只是從txtStart獲取日期值。我怎樣才能提取這裏的日期,並在日曆中使用它? – zairahCS 2012-03-13 19:15:18

+2

我假設你在jTextField中有字符串形式的日期,例如:'1987-12-24',現在你可以使用'SimpleDateFormat'來獲取字符串到'日期'和'日期'到'日曆' – 2012-03-13 19:17:38

+0

謝謝許多!有效。 – zairahCS 2012-03-13 19:35:09

0

一旦你有了正確的format,你可以使用JodaTime。您可以直接解析使用JodaTime的String值,但既然你已經這樣做了,我不打擾...

Date date = ...; 
DateTime dt = new DateTime(date); 
dt = dt.plusDays(102); 
date = dt.toDate(); 
-1
import java.util.*; 
class ISCprac2009q01{ 
public static void main(String args[]) 
throws InputMismatchException{ 

Scanner scan=new Scanner(System.in); 
System.out.println("ENTER DAY NUMER(>=1 AND 
<=366) : "); 
int day_number=scan.nextInt(); 
System.out.println("ENTER YEAR(4 DIGIT) : "); 
int year=scan.nextInt(); 
System.out.println("ENTER DATE AFTER(N)(>=1 AND 
<=100) : "); 
int n=scan.nextInt(); 

if(day_number<1 || day_number>366) 
System.out.println("INVALID DAY NUMBER."); 
else if(year<1000 || year >9999) 
System.out.println("INVALID YEAR"); 
else if(n<1 || n>100) 
System.out.println("INVALID DATE AFTER VALUE."); 
else{ 
//INITIALIZE MONTH NAMES AND NUMBER OF DAYS IN EACH MONTH 
    String month_names[]={"JANUARY", "FEBRUARY","MARCH", 
     "APRIL","MAY","JUNE","JULY","AUGUST","SEPTEMBER", 
     "OCTOBER","NOVERMBER","DECEMBER"}; 
    int month_days[]={31,28,31,30,31,30,31,31,30,31,30,31}; 
    int i, day, month,day_after; 
    String suffix; 

    //IF IT IS A LEAP YEAR FEBRURAY SHOULD HAVE 29 DAYS 
    if(year%400==0 || (year%100!=0 && year%4==0)) 
     month_days[1]=29; 

     i=0; 
    //FIND THE DATE CORRESPONDING TO THE DAY NUMBER 
     day=day_number; 
     while(day>month_days[i]) 
     { 
      day-=month_days[i]; 
      i++; 
     } 
     month=i; 
     //ADD SUFFIX AS PER THE DAY 
     if(day%10==1 && day/10!=1) 
      suffix="ST"; 
     else if(day%10==2 && day/10!=1) 
      suffix="ND"; 
     else if(day%10==3 && day/10!=1) 
      suffix="RD"; 
     else 
      suffix="TH"; 
     System.out.println("OUTPUT:"); 
     //FIRST PART OF THE OUTPUT 
     System.out.println(day+suffix+" "+ 
     month_names[month]+" "+year); 

     //TO CALCULATE DATE AFTER N DAYS 
     day_after=day_number+n; 
     i=0; 
     while(day_after>month_days[i]) 
     { 
      day_after-=month_days[i]; 
      i++; 
      if(i==12){ 
      i=0; 
      year++; 
      if(year%400==0 || (year%100!=0 && year%4==0)) 
       month_days[1]=29; 
      } 
     } 
     day=day_after; 
     month=i; 
     //ADD SUFFIX AS PER THE DAY 
     if(day%10==1 && day/10!=1) 
      suffix="ST"; 
     else if(day%10==2 && day/10!=1) 
      suffix="ND"; 
     else if(day%10==3 && day/10!=1) 
      suffix="RD"; 
     else 
      suffix="TH"; 
     //SECOND PART OF THE OUTPUT 
     System.out.println(day+suffix+" "+ 
     month_names[month]+" "+year); 
} 
} 
} 
+1

這並不回答OP問題,而且不需要編寫太多的代碼來計算N個日期前的日期。請檢查接受的答案。 – UditS 2016-02-21 07:07:09

相關問題