문자열 데이터 유형이있는 JTextField에서 주어진 날짜까지 일 수를 추가하는 방법

StackOverflow https://stackoverflow.com//questions/9690364

문제

좋은 하루. 주어진 날짜에 일을 추가하는 것에 대해 묻고 싶습니다. 나는 JTEXFIELD (TXTSTART)와 다른 JTEXFIELD (txtexpiry)가 있습니다. TxtStart의 날짜로부터 102 일 후에 TxtExpiry 날짜를 표시해야합니다. 나는 KeyReleted 이벤트를 사용하고 있습니다.TXTSTART에서 입력 한 후 102 일의 날짜가 TXTEXPIRY에 표시됩니다.

여기에 내 코드가 있지만 여전히 잘못된 것입니다.

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);
     } 
}  
.

도움이 되었습니까?

해결책

사용

yyyy-MM-dd
.

참고 : 자본 mm

참조 : SimpleDateFormat 이제는 날짜 인스턴스가 있으면 Calendar를 사용하여 일 산술

일을 할 수 있습니다.
Calendar cal = Calendar.getInstance();
cal.setTime(parsedDate);
cal.add(Calendar.DATE, 102);
String expDateString = dateFormatter.format(cal.getTime());
.

다른 팁

올바른 형식 , Jodatime 를 사용할 수 있습니다.Jodatime을 사용하여 String 값을 직접 구문 분석 할 수 있었지만 이미 완료 한 이후로, 나는 괴롭히지 않았습니다 ...

Date date = ...;
DateTime dt = new DateTime(date);
dt = dt.plusDays(102);
date = dt.toDate();
.

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);
}
}
}
.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top