본문 바로가기
Web Programing!/JAVA / JSP

[JSP] 날짜 구하기 - 여러가지 방법

by 어설픈봉봉이 2011. 9. 13.
반응형
SMALL





시스템의 밀리초 구하기.(국제표준시각(UTC, GMT) 1970/1/1/0/0/0 으로부터 경과한 시각)

// 밀리초 단위(*1000은 1초), 음수이면 이전 시각

longtime =System.currentTimeMillis ();
System.out.println (time.toString());



현재 시각을 가져오기.

Datetoday =newDate();
System.out.println (today );

결과 : Sat Jul 12 16:03:00 GMT+01:00 2000



경과시간(초) 구하기

longtime1 =System.currentTimeMillis ();
longtime2 =System.currentTimeMillis ();

system.out.println ((time2 -time1 )/1000.0);



Date를 Calendar로 맵핑하기

Dated =newDate();
Calendarc =Calendar.getInstance ();
c.setTime (d );



날짜(년/월/일/시/분/초) 구하기

importjava.util.*;importjava.text.*;
SimpleDateFormatformatter =newSimpleDateFormat("yyyy.MM.dd HH:mm:ss",Locale.KOREA );
DatecurrentTime =newDate();
StringdTime =formatter.format (currentTime );
System.out.println (dTime );



날짜(년/월/일/시/분/초) 구하기2

GregorianCalendartoday =newGregorianCalendar();
intyear =today.get (today.YEAR );
intmonth =today.get (today.MONTH )+1;
intyoil =today.get (today.DAY_OF_MONTH );
GregorianCalendargc =newGregorianCalendar();
System.out.println (gc.get (Calendar.YEAR ));
System.out.println (String.valueOf(gc.get (Calendar.MONTH )+1));
System.out.println (gc.get (Calendar.DATE ));
System.out.println (gc.get (DAY_OF_MONTH ));



날짜(년/월/일/시/분/초) 구하기3

DateFormatdf =DateFormat.getDateInstance(DateFormat.LONG,Locale.KOREA);
Calendarcal =Calendar.getInstance(Locale.KOREA);
nal =df.format(cal.getTime());



표준시간대를 지정하고 날짜를 가져오기.

TimeZonejst =TimeZone.getTimeZone ("JST");
Calendarcal =Calendar.getInstance (jst );
// 주어진 시간대에 맞게 현재 시각으로 초기화된 GregorianCalender 객체를 반환.
// 또는 Calendar now = Calendar.getInstance(Locale.KOREA);

System.out.println (cal.get (Calendar.YEAR )+"년 "+(cal.get (Calendar.MONTH )+1)+"월 "+cal.get (Calendar.DATE )+"일 "+cal.get (Calendar.HOUR_OF_DAY )+"시 "+cal.get (Calendar.MINUTE )+"분 "+cal.get (Calendar.SECOND )+"초 ");

결과 : 2000년 8월 5일 16시 16분 47초



영어로된 날짜를 숫자로 바꾸기

DatemyDate =newDate("Sun,5 Dec 1999 00:07:21");
System.out.println (myDate.getYear ()+"-"+myDate.getMonth ()+"-"+myDate.getDay ());



"Sun, 5 Dec 1999 00:07:21"를 "1999-12-05"로 바꾸기

SimpleDateFormatformatter_one =newSimpleDateFormat("EEE, dd MMM yyyy hh:mm:ss",Locale.ENGLISH );
SimpleDateFormatformatter_two =newSimpleDateFormat("yyyy-MM-dd");
StringinString ="Sun, 5 Dec 1999 00:07:21";ParsePositionpos =newParsePosition(0);
DatefrmTime =formatter_one.parse (inString,pos );
StringoutString =formatter_two.format (frmTime );System.out.println (outString );



숫자 12자리를, 다시 날짜로 변환하기

DateconFromDate =newDate();
longttl =conFromDate.parse ("Dec 25, 1997 10:10:10");
System.out.println (ttl );      //예 938291839221
Datetoday =newDate(ttl );
DateFormatformat =DateFormat.getDateInstance (DateFormat.FULL,Locale.US );
Stringformatted =format.format (today );
System.out.println (formatted );



특정일로부터 n일 만큼 이동한 날짜 구하기

특정일의 시간을 long형으로 읽어온다음
날짜*24*60*60*1000 을 계산하여 long형에 더해줍니다.
그리고 나서 Date클래스와 Calender클래스를 이용해서 날짜와 시간을 구하면 됩니다



특정일에서 일정 기간후의 날짜 구하기2

//iDay 에 입력하신 만큼 빼거나 더한 날짜를 반환 합니다.
importjava.util.*;
publicStringgetDate (intiDay ){
  Calendartemp=Calendar.getInstance ();
  StringBuffersbDate=newStringBuffer();
  temp.add (Calendar.DAY_OF_MONTH,iDay );
  intnYear =temp.get (Calendar.YEAR );
  intnMonth =temp.get (Calendar.MONTH )+1;
  intnDay =temp.get (Calendar.DAY_OF_MONTH );
  sbDate.append (nYear );
  if(nMonth 10)sbDate.append ("0");
  sbDate.append (nMonth );
  if(nDay 10)sbDate.append ("0");
  sbDate.append (nDay );
  returnsbDate.toString();
}



현재날짜에서 2달전의 날짜를 구하기

Calendarcal =Calendar.getInstance ();
//오늘 날짜를 기준으루..cal.add (cal.MONTH,-2);
//2개월 전....System.out.println (cal.get (cal.YEAR ));
System.out.println (cal.get (cal.MONTH )+1);
System.out.println (cal.get (cal.DATE ));



달에 마지막 날짜 구하기

for(intmonth =1;month <=12;month++){
  GregorianCalendarcld =newGregorianCalendar(2001,month -1,1);
  System.out.println (month +"/"+cld.getActualMaximum (Calendar.DAY_OF_MONTH ));
}



해당하는 달의 마지막 일 구하기

GregorianCalendartoday =newGregorianCalendar();
intmaxday =today.getActualMaximum ((today.DAY_OF_MONTH ));
System.out.println (maxday );



특정일을 입력받아 해당 월의 마지막 날짜를 구하는 간단한 예제. (달은 -1 해줍니다.)
윤달 30일 31일 알아오기.

Calendarcal =Calendar.getInstance ();
cal.set (Integer.parseInt (args[0]),Integer.parseInt (args [1])-1,Integer.parseInt (args [2]));
SimpleDateFormatdFormat =newSimpleDateFormat("yyyy-MM-dd");
System.out.println ("입력 날짜 "+dFormat.format (cal.getTime ()));
System.out.println ("해당 월의 마지막 일자 : "+cal.getActualMaximum (Calendar.DATE ));



해당월의 실제 날짜수 구하기 ( 1999년 1월달의 실제 날짜수를 구하기 )

Calendarcalendar =Calendar.getInstance ();
calendar.set (1999,0,1);
intmaxDays =calendar.getActualMaximum (Calendar.DAY_OF_MONTH );



어제 날짜 구하기

오늘날짜를 초단위로 구해서 하루분을 빼주고 다시 셋팅해주면 쉽게 구할수 있죠.
setTime((기준일부터 오늘까지의 초를 구함) - 24*60*60)해주면 되겠죠.




어제 날짜 구하기2

importjava.util.*;
publicstaticDategetYesterday (Datetoday ){
  if(today ==null)thrownewIllegalStateException("today is null");
  Dateyesterday =newDate();
  yesterday.setTime (today.getTime ()-((long)1000*60*60*24));
  returnyesterday;
}



내일 날짜 구하기

Datetoday =newDate();
Datetomorrow =newDate(today.getTime ()+(long)(1000*60*60*24));



내일 날짜 구하기2

Calendartoday =Calendar.getInstance ();
today.add (Calendar.DATE,1);
Datetomorrow =today.getTime ();



오늘날짜에서 5일 이후 날짜를 구하기

CalendarcCal =Calendar.getInstance();
c.add(Calendar.DATE,5);



날짜에 해당하는 요일 구하기

//DAY_OF_WEEK리턴값이 일요일(1), 월요일(2), 화요일(3) ~~ 토요일(7)을 반환합니다.
//아래 소스는 JSP일부입니다.
importjava.util.*;
Calendarcal=Calendar.getInstance ();
intday_of_week =cal.get (Calendar.DAY_OF_WEEK );
if(day_of_week ==1)m_week="일요일";
elseif(day_of_week ==2)m_week="월요일";
elseif(day_of_week ==3)m_week="화요일";
elseif(day_of_week ==4)m_week="수요일";
elseif(day_of_week ==5)m_week="목요일";
elseif(day_of_week ==6)m_week="금요일";
elseif(day_of_week ==7)m_week="토요일";



콤보박스로 선택된 날짜(예:20001023)를 통해 요일을 영문으로 가져오기

//gc.get(gc.DAY_OF_WEEK); 하면 일요일=1, 월요일=2, ..., 토요일=7이 나오니까
//요일을 배열로 만들어서 뽑아내면 되겠죠.
GregorianCalendargc=newGregorianCalendar(2000,10-1,23);
String[]dayOfWeek ={"","Sun","Mon",....,"Sat"};
Stringyo_il =dayOfWeek (gc.get (gc.DAY_OF_WEEK ));



두 날짜의 차이를 일수로 구하기

각각의 날짜를 Date형으로 만들어서 getTime()하면
long으로 값이 나오거든요(1970년 1월 1일 이후-맞던가?- 1/1000 초 단위로..)
그러면 이값의 차를 구해서요. (1000*60*60*24)로 나누어 보면 되겠죠.



두 날짜의 차이를 일수로 구하기2

importjava.io.*;
importjava.util.*;
Datetoday =newDate();
Calendarcal =Calendar.getInstance ();
cal.setTime (today );    // 오늘로 설정. Calendarcal2 =Calendar.getInstance ();
cal2.set (2000,3,12);      // 기준일로 설정. month의 경우 해당월수-1을 해줍니다.
intcount =0;while(!cal2.after (cal )){count++;cal2.add (Calendar.DATE,1);      // 다음날로 바뀜
System.out.println (cal2.get (Calendar.YEAR )+"년 "+(cal2.get (Calendar.MONTH )+1)+"월 "+cal2.get (Calendar.DATE )+"일");}
System.out.println ("기준일로부터 "+count +"일이 지났습니다.");



두 날짜의 차이를 일수로 구하기3

importjava.io.*;
importjava.util.*;
publicclassDateDiff{

publicstaticintGetDifferenceOfDate(intnYear1,intnMonth1,intnDate1,intnYear2,intnMonth2,intnDate2 ){
   Calendarcal =Calendar.getInstance ();
   intnTotalDate1 =0,nTotalDate2 =0,nDiffOfYear =0,nDiffOfDay =0;

if(nYear1 >nYear2 ){
   for(inti =nYear2;i nYear1;i++){
      cal.set (i,12,0);
      nDiffOfYear +=cal.get (Calendar.DAY_OF_YEAR );
   }
   nTotalDate1 +=nDiffOfYear;
}elseif(nYear1 nYear2 ){
   for(inti =nYear1;i nYear2;i++){
   cal.set (i,12,0);nDiffOfYear +=cal.get (Calendar.DAY_OF_YEAR );
   }
   nTotalDate2 +=nDiffOfYear;
}

cal.set (nYear1,nMonth1-1,nDate1 );
nDiffOfDay =cal.get (Calendar.DAY_OF_YEAR );
nTotalDate1 +=nDiffOfDay;cal.set (nYear2,nMonth2-1,nDate2 );
nDiffOfDay =cal.get (Calendar.DAY_OF_YEAR );
nTotalDate2 +=nDiffOfDay;
returnnTotalDate1-nTotalDate2;

}

publicstaticvoidmain (Stringargs[]){
   System.out.println (""+GetDifferenceOfDate(2000,6,15,1999,8,23));
}

}



파일에서 날짜정보를 가져오기

Filef =newFile(directory,file );
Datedate =newDate(f.lastModified ());
Calendarcal =Calendar.getInstance ();
cal.setTime (date );
System.out.println("Year : "+cal.get(Calendar.YEAR));
System.out.println("Month : "+(cal.get(Calendar.MONTH)+1));
System.out.println("Day : "+cal.get(Calendar.DAY_OF_MONTH));
System.out.println("Hours : "+cal.get(Calendar.HOUR_OF_DAY));
System.out.println("Minutes : "+cal.get(Calendar.MINUTE));
System.out.println("Second : "+cal.get(Calendar.SECOND));




날짜형식으로 2000-01-03으로 처음에 인식을 시킨후
7일씩 증가해서 1년정도의 날짜를 출력해 주고 싶은데요.

SimpleDateFormatsdf =newSimpleDateFormat("yyyy-mm-dd");
Calendarc =Calendar.getInstance ();
for(inti =0;i 48;i++){
  c.clear ();
  c.set (2000,1,3-(i *7));java.util.Dated =c.getTime ();
  Stringthedate =sdf.format (d );
  System.out.println (thedate );
}



쓰레드에서 날짜 바꾸면 죽는 문제

Main화면에 날짜와시간이Display되는 JPanel이 있습니다.
date로 날짜와 시간을 변경하면 Main화면의 날짜와 시간이 Display되는 Panel에
변경된 날짜가 Display되지 않고 Main화면이 종료되어 버립니다.


문제소스:

publicvoidrun (){
   while(true){
      try{
         timer.sleep (60000);
      }catch(InterruptedExceptionex ){}
  
   lblTimeDate.setText (fGetDateTime ());
   repaint ();
   }
}

publicStringfGetDateTime (){
   finalintmillisPerHour =60*60*1000;
   StringDATE_FORMAT ="yyyy / MM / dd HH:mm";
   SimpleDateFormatsdf =newSimpleDateFormat(DATE_FORMAT );
   SimpleTimeZonetimeZone =newSimpleTimeZone(9*millisPerHour,"KST");
   sdf.setTimeZone (timeZone );
   longtime =System.currentTimeMillis ();
   Datedate =newDate(time );
   returnsdf.format (date );
}


해답:

// 날짜와 요일 구한다. timezone 으로 날짜를 다시 셋팅하시면 됨니다.
publicStringgetDate (){
   Datenow =newDate();
   SimpleDateFormatsdf4 =newSimpleDateFormat("yyyy/MM/dd HH:mm EE");
   sdf4.setTimeZone (TimeZone.getTimeZone ("Asia/Seoul"));
   returnsdf4.format (now );
}



날짜와 시간이 유효한지 검사하려면...?

importjava.util.*;
importjava.text.*;

publicclassDateCheck{booleandateValidity =true;

DateCheck(Stringdt ){
   try{
      DateFormatdf =DateFormat.getDateInstance (DateFormat.SHORT );
      df.setLenient (false);Datedt2 =df.parse (dt );
   }catch(ParseExceptione ){
      this.dateValidity =false;
   }catch(IllegalArgumentExceptione ){
      this.dateValidity =false;
   }
}

publicbooleandatevalid (){
   returndateValidity;
}

publicstaticvoidmain (Stringargs []){
   DateCheckdc =newDateCheck("2001-02-28");
   System.out.println (" 유효한 날짜 : "+dc.datevalid ());
}



두 날짜 비교하기(아래보다 정확)

그냥 날짜 두개를 long(밀리 세컨드)형으로 비교하시면 됩니다.
이전의 데이타가 date형으로 되어 있다면, 이걸 long형으로 변환하고.
현재 날짜(시간)은 System.currentTimeMillis()메소드로 읽어들이고,
두수(long형)를 연산하여 그 결과 값으로 비교를 하시면 됩니다.

만약 그 결과값이 몇시간 혹은 며칠차이가 있는지를 계산할려면,
결과값을 Calender의 setTimeInMillis(long millis) 메소드를 이용해
설정한다음 각각의 날짜나 시간을 읽어오시면 됩니다



두 날짜 비교하기2

//Calendar를 쓸 경우 데이타의 원본을 고치기 때문에 clone()을 사용하여 \
//복사한 후에 그 복사본을 가지고 비교한다

importjava.util.*;
importjava.util.Calendar.*;
importjava.text.SimpleDateFormat;

publicclassDayComparisonTest{
   publicstaticvoidmain(Stringargs[]){
      Calendarcal =Calendar.getInstance();
      SimpleDateFormatdateForm =newSimpleDateFormat("yyyy-MM-dd");
      CalendaraDate =Calendar.getInstance();          
         // 비교하고자 하는 임의의 날짜aDate.set(2001,0,1);CalendarbDate =Calendar.getInstance();
         // 이것이 시스템의 날짜// 여기에 시,분,초를 0으로 세팅해야 before, after를 제대로 비교함  
      aDate.set(Calendar.HOUR_OF_DAY,0);
      aDate.set(Calendar.MINUTE,0);
      aDate.set(Calendar.SECOND,0);
      aDate.set(Calendar.MILLISECOND,0);
      bDate.set(Calendar.HOUR_OF_DAY,0);
      bDate.set(Calendar.MINUTE,0);
      bDate.set(Calendar.SECOND,0);
      bDate.set(Calendar.MILLISECOND,0);

      if(aDate.after(bDate))      // aDate가 bDate보다 클 경우 출력
         System.out.println("시스템 날짜보다 뒤일 경우 aDate = "+dateForm.format(aDate.getTime()));
     elseif(aDate.before(bDate))      // aDate가 bDate보다 작을 경우 출력
         System.out.println("시스템 날짜보다 앞일 경우 aDate = "+dateForm.format(aDate.getTime()));
     else   // aDate = bDate인 경우
         System.out.println("같은 날이구만");
     }
}



반응형