우리는 java.util.Date 혹은 java.sql.Date 타입의 객체에서 특정한 형식의 문자열로 날짜를 가져오기 위해서 java.text.SimpleDateFormat 클래스를 이용할 수 있다는 것을 알고 있다.
package javacodesnipet; /** * @author 신윤섭 */ public class SimpleDateFormatTest {
public static void main(String[] args){
// 현재 일시 정보를 갖는 Date 객체를 생성한다. java.util.Date currentDate = new java.util.Date(); //Date객체로부터 특정한 형식의 문자열로 일시를 만들어내기 위한 포매터를 생성한다. java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("yyyy년MM월dd일 HH시mm분ss초"); //포매터를 이용하여 Date객체로부터 문자열을 만들어낸다. String dateString = format.format(currentDate); //변환된 문자열을 확인한다. 결과 : 2007년07월22일 02시21분42초 System.out.println(dateString);
} }
위의 코드는 흔히 사용하는 코드일 것이다.
그런데 이 SimpleDateFormat 클래스의 parse() 메소드를 이용하면 역으로 문자열 형식의 날짜로부터 Date객체를 생성 해낼 수도 있다.
package javacodesnipet; /** * @author 신윤섭 */ public class SimpleDateFormatTest {
public static void main(String[] args){ try { // "2007-07-22" 이란 문자열로 2007년 7월 22일의 정보를 갖는 Date객체를 만들어보자 String textDate = "2007-07-22";
// 입력할 날짜의 문자열이 yyyy-MM-dd 형식이므로 해당 형식으로 포매터를 생성한다. java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("yyyy-MM-dd");
//SimpleDateFormat.parse()메소드를 통해 Date객체를 생성한다. //SimpleDateFormat.parse()메소드는 입력한 문자열 형식의 날짜가 //포맷과 다를경우 java.text.ParseException을 발생한다. java.util.Date date = format.parse(textDate);
//위에서 만든 date객체가 정말 7월22일인지 확인 해보자. java.text.SimpleDateFormat format1 = new java.text.SimpleDateFormat("yyyy년MM월dd일 HH시mm분ss초"); String dateString = format1.format(date); //Date객체의 날자를 확인한다.. 결과 : 2007년07월22일 00시00분00초 System.out.println(dateString); } catch (java.text.ParseException ex) { ex.printStackTrace(); }
public class DateDiff { public static int GetDifferenceOfDate ( int nYear1, int nMonth1, int nDate1, int nYear2, int nMonth2, int nDate2 ) { Calendar cal = Calendar.getInstance ( ); int nTotalDate1 = 0, nTotalDate2 = 0, nDiffOfYear = 0, nDiffOfDay = 0;
if ( nYear1 > nYear2 ) { for ( int i = nYear2; i < nYear1; i++ ) { cal.set ( i, 12, 0 ); nDiffOfYear += cal.get ( Calendar.DAY_OF_YEAR ); } nTotalDate1 += nDiffOfYear; } else if ( nYear1 < nYear2 ) { for ( int i = nYear1; i < nYear2; i++ ) { cal.set ( i, 12, 0 ); nDiffOfYear += cal.get ( Calendar.DAY_OF_YEAR ); } nTotalDate2 += nDiffOfYear; }
public String fGetDateTime ( ) { final int millisPerHour = 60 * 60 * 1000; String DATE_FORMAT = "yyyy / MM / dd HH:mm"; SimpleDateFormat sdf = new SimpleDateFormat ( DATE_FORMAT ); SimpleTimeZone timeZone = new SimpleTimeZone ( 9 * millisPerHour, "KST" ); sdf.setTimeZone ( timeZone );
long time = System.currentTimeMillis ( ); Date date = new Date ( time ); return sdf.format ( date ); }
해답:
// 날짜와 요일 구한다. timezone 으로 날짜를 다시 셋팅하시면 됨니다. public String getDate ( ) { Date now = new Date ( ); SimpleDateFormat sdf4 = new SimpleDateFormat ( "yyyy/MM/dd HH:mm EE" ); sdf4.setTimeZone ( TimeZone.getTimeZone ( "Asia/Seoul" ) );
return sdf4.format ( now ); }
날짜와 시간이 유효한지 검사하려면...?
import java.util.*; import java.text.*;
public class DateCheck { boolean dateValidity = true;
public boolean datevalid ( ) { return dateValidity; }
public static void main ( String args [] ) { DateCheck dc = new DateCheck ( "2001-02-28" ); System.out.println ( " 유효한 날짜 : " + dc.datevalid ( ) ); } }
두 날짜 비교하기(아래보다 정확)
그냥 날짜 두개를 long(밀리 세컨드)형으로 비교하시면 됩니다...
이전의 데이타가 date형으로 되어 있다면, 이걸 long형으로 변환하고. 현재 날짜(시간)은 System.currentTimeMillis()메소드로 읽어들이고, 두수(long형)를 연산하여 그 결과 값으로 비교를 하시면 됩니다.
만약 그 결과값이 몇시간 혹은 며칠차이가 있는지를 계산할려면, 결과값을 Calender의 setTimeInMillis(long millis) 메소드를 이용해 설정한다음 각각의 날짜나 시간을 읽어오시면 됩니다
두 날짜 비교하기2
//Calendar를 쓸 경우 데이타의 원본을 고치기 때문에 clone()을 사용하여 //복사한 후에 그 복사본을 가지고 비교한다 import java.util.*; import java.util.Calendar.*; import java.text.SimpleDateFormat;
public class DayComparisonTest { public static void main(String args[]) { Calendar cal = Calendar.getInstance(); SimpleDateFormat dateForm = new SimpleDateFormat("yyyy-MM-dd");
Calendar aDate = Calendar.getInstance(); // 비교하고자 하는 임의의 날짜 aDate.set(2001, 0, 1);
Calendar bDate = 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 );
if (aDate.after(bDate)) // aDate가 bDate보다 클 경우 출력 System.out.println("시스템 날짜보다 뒤일 경우 aDate = " + dateForm.format(aDate.getTime())); else if (aDate.before(bDate)) // aDate가 bDate보다 작을 경우 출력 System.out.println("시스템 날짜보다 앞일 경우 aDate = " + dateForm.format(aDate.getTime())); else // aDate = bDate인 경우 System.out.println("같은 날이구만"); } }