달력

4

« 2024/4 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
반응형
2013. 2. 15. 04:11

안드로이드 - 타이머 샘플 안드로이드 이야기2013. 2. 15. 04:11

728x90
반응형

안드로이드 - 타이머 샘플

출처:http://micropilot.tistory.com/entry/Android-Timer-Example

import android.app.Activity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.widget.TextView;

public class CountDownTest extends Activity {

TextView tv; //textview to display the countdown

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

tv = new TextView(this);
this.setContentView(tv);

/*2.5초 동안 0.5초마다 카운트다운 설정
  * 카운트다운 시작 후 매 0.5초마다 onTick() 콜백
  * 남은 시간이 0초일때 onFinish() 콜백
  */
MyCount counter = new MyCount(5000,1000);

counter.start();

}


//countdowntimer is an abstract class, so extend it and fill in methods
public class MyCount extends CountDownTimer{

public MyCount(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}

@Override
public void onFinish() {
tv.setText(”done!”);
}

@Override
public void onTick(long millisUntilFinished) {
tv.setText(”Left: ” + millisUntilFinished/1000);

}

}
}

728x90
반응형
:
Posted by mapagilove
728x90
반응형

안드로이드 - Click Listener 변화


Easier click listeners

GUI 개발하는 도중, 여러 Button 에 적합한 Click Listener 를 설정 하는 일이 자주 일어난다. 하지만 이 작업은 좀 상투적인 코드를 요구하곤 한다.


findViewById(R.id.myButton).setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        // Do stuff
    }
});


이러한 코드의 양을 줄이기 위해, 하나의 Click Listener 만을 생성한 후, 여러개의 Button 들이 해당 Listener 를 공유하게 할 수도 있다. 이러한 방식이 생성되는 클래스의 수를 줄이는데는 도움이 될 수 있지만, 여전히 제법 많은 양의 코드가 필요하고, Click Listener 를 설정하기위하여, XML 레이아웃 상 모든 Button 들에게 ID 를 부여해 주어야 한다.


View.OnClickListener handler = View.OnClickListener() {
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.myButton: // doStuff
                break;
            case R.id.myOtherButton: // doStuff
                break;
        }
    }
}

findViewById(R.id.myButton).setOnClickListener(handler);
findViewById(R.id.myOtherButton).setOnClickListener(handler);


그러나, 안드로이드 1.6에서 더이상 이런 작업을 할 필요가 없다. 개발자는 자신이 작성한 Activity 에 Click 이벤트를 처리하기위한 메서드만을 구현해 주면 된다. (이 메서드는 반드시 하나의 View 를 인자로 받는 형식의 메서드여야 한다.)


class MyActivity extends Activity {
    public void myClickHandler(View target) {
        // Do stuff
    }
}


그리고, XML 레이아웃 상에서 앞서 구현한 메서드를 직접 참조해 준다.


<Button android:onClick="myClickHandler" />


이 새로운 방법은 개발자가 작성해야 하는 Java 와 XML 코드의 양 모두를 줄여 주며, 개발자가 어플리케이션 개발에 보다 많은 시간을 사용할 수 있도록 해 준다.


안드로이드 팀은 개발자들이 어플리케이션을 가장 쉽고 효율적으로 작성할 수 있도록 최선을 다하고 있다. 우리는 1.6 에서 이루어진 여러가지 개선 사항들이 유용하길 바라고, 안드로이드 마켓에서 여러분들의 어플리케이션을 만나보길 기대한다.

728x90
반응형
:
Posted by mapagilove
728x90
반응형
원본출처:http://starkapin.tistory.com/184
안드로이드에서 PORTRAIT, LANDSCAPE 두가지 모드로 작업을 진행해야 할 때가 있다. 나는 무조건 단방향모드만 지원할꺼야 라고 기획을 잡아놓으면 이 두가지 상황중 하나만 설정을 해 놓으면 된다. 그러면 조건에 맞춰 어떻게 사용해야 할지를 살펴보자.

Manifest에서 처리하는 것만 조사했으니 이것에 대한 내용만 정리해본다면..


     
           
           
     

위 소스에서 살펴보면 android Attribute 중 screenOrientation이라는 항목이 보인다. 우리는 이것을 설정해 가로모드인지 세로모드인지를 고정시킬 수 있다.

물론 기본적으로 안드로이드에서는 위와 같은 설정을 해주지 않으면 기본적으로 가로, 세로 모드 전환을 시켜준다. 이럴때에는 다음과 같은 상황을 고려해야 한다.

"세로, 가로 모드 전환시 레이아웃은 어떻게 변화시켜 줄 것인가?"

일반적으로 우리가 주로 사용하는 모드는 세로모드다, 가로폭이 좁고 세로폭이 길어 전체적인 웹의 모습이나 리스트 항목을 보기엔 매우 유리한 편이다. 반대로 가로모드는 넓은 화면을 보기에는 좋지만 세로폭이 좁아 아래로 나열된 항목을 볼땐 불편한 점이 많다.

이 두가지를 다 지원한다고 했을 때 각각 아이템 위젯들은 세로형에서 적합한 크기와 가로모드에서 적합한 크기로 변화되어야 한다. 그래서 우리는 이때 다음 명령어를 통해 현재 상태를 읽어 오고 레이아웃을 적용하는 방법을 사용할 수 있다.

WindowManager wm = getWindowManager();
if (wm == null) return;
    setOrientation(wm.getDefaultDisplay().getOrientation()); // 자체 메소드

getOrientation 메소드를 이용하면 우리는 현재 모드를 읽어오게 되고 지금 사용자 정의된 setOrientation 메소드 처럼 자신만의 레이아웃을 관리하는 함수를 등록해 사용 할 수 있다.

if(m_isLandscape == 0) {
    // Portrait mode, Nothing change previous version
    setContentView(R.layout.reservation_setting_layout);
    mMainlayout = (RelativeLayout)this.findViewById(R.id.MainLayout);
}else {
    // Landscape mode, call another layout
    setContentView(R.layout.reservation_date_land_layout);
    mLMainlayout = (LinearLayout)this.findViewById(R.id.MainLayout);
}
setOrientation 메소드 내부를 일부 살펴보자면 위와 같이 가로와 세로모드에서 각각의 레이아웃을 새로 받아온다. 이를 이용해 우리가 원하는 레이아웃을 입맛에 맞게 변경이 가능하다.

문제는 이러한 메소드를 onCreate() 부분에서만 사용하게 만드느냐이다. 답은 '아니다'다. 액티비티 진입시에만 발생하는 onCreate에서만 호출 된다면 액티비티 구동중에서의 변화는 일어나지 않는다. 이럴 때에는 onConfigurationChanged라는 콜백 메소드를 이용하는 방법이 있다. 이를 적용시키기 위해서는 Manifest 파일에서 해당 액티비티에 ConfigChanges 속성을 부여 해준다.

android:configChanges="orientation|keyboardHidden" 

위와 같은 속성을 추가 해준뒤에, 

@Override
public void onConfigurationChanged(Configuration newConfig)
{
	super.onConfigurationChanged(newConfig);
        // 다시 setOrientation()을 호출한다.
        WindowManager wm = getWindowManager();
        if (wm == null) return;
        setOrientation(isLandscape);
}
onConfigurationChanged는 액티비티의 방향전환이 일어날 때 이 메소드를 통해 액티비티를 새로 리셋을 하게된다. 

그외에 핸드폰에서 가로모드 방향전환을 막게 되는 경우가 있는데 이러한 설정을 동일하게 맞춰주기 위한 매니페스트 속성으로는 다음이 존재한다.

android:screenOrientation="unspecified"

위와 같은 내용을 적게 되면 핸드폰 설정값에 따라 방향전환이 일어나게 된다.
728x90
반응형
:
Posted by mapagilove
728x90
반응형
안드로이드 - TextView 전광판 기능 사용법

TextView 에서 문자열이 오른쪽에서 왼쪽으로 흐르게 표시되는 전광판 기능을 사용하는 방법은 다음과 같습니다.

* 아래와 같이 TextView 를 layout.xml 에 정의한다.

- TextView 에 입력된 문자열의 길이가 일정 길이 이상일 때에만 TextView 의 전광판 기능을 사용할 수 있다.

<TextView android:id="@+id/txtInfoMessage"

android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Hello World, TestTextViewActivity! This is not my fault and send me to bye. welcome to earth."
android:ellipsize="marquee"
android:scrollHorizontally="true"
android:focusable="true"
android:focusableInTouchMode="true"
/>

* layout.xml 을 사용하는 Activity 가 생성될 때에 아래의 코드를 추가한다.

m_txtInfoMessage = (TextView)findViewById( R.id.txtInfoMessage );
m_txtInfoMessage.setSelected( true );

참고로 위와 같이 실행하면 TextView 에 설정된 문자열이 3번 정도 옆으로 흐르다가 흐름을 멈추게 된다. 무한 반복으로 전광판 기능을 사용하고 싶으면 TextView 에 아래의 항목을 추가하면 된다.

android:marqueeRepeatLimit="marquee_forever"

728x90
반응형
:
Posted by mapagilove
728x90
반응형

안드로이드-앱 패키지 이름 변경

안드로이드앱 패키지 이름 변경하기

출처: http://stackoverflow.com/questions/4025369/how-to-change-package-name-of-an-android-application

1) 패키지 이름에서 오른쪽마우스>Refactor>Rename

안드로이드 패키지 이름 변경 메뉴

안드로이드 패키지 이름 변경 메뉴

2) 변경할 이름 지정

변경할 패키지 이름 입력

변경할 패키지 이름 입력

3) preview 를 통해서 변경될 내용을 확인후 일괄 변경

패키지이름  변경시 수정될 파일내용 확인

패키지이름 변경시 수정될 파일내용 확인

4) 완료…

*) 기타 다른방법으로는
eclipse에서 프로젝트 선택한상태에서 우클릭 > Android Tools > Rename
이 방법 으로하니, 일부 에러가 나고 정상적으로 안되는거 같음.. (eclipse indigo에서)

728x90
반응형
:
Posted by mapagilove
728x90
반응형

자바 - 날짜/시간 계산 예제 코드 :: Java Date Code Snippet

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


// 밀리초 단위(*1000은 1초), 음수이면 이전 시각
long time = System.currentTimeMillis ( );
System.out.println ( time.toString ( ) );


현재 시각을 가져오기.


Date today = new Date ();
System.out.println ( today );

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


경과시간(초) 구하기


long time1 = System.currentTimeMillis ();
long time2 = System.currentTimeMillis ();
system
.out.println ( ( time2 - time1 ) / 1000.0 );


Date를 Calendar로 맵핑하기


Date d = new Date ( );
Calendar c = Calendar.getInstance ( );
c
.setTime ( d );


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


import java.util.*;
import java.text.*;


SimpleDateFormat formatter = new SimpleDateFormat ( "yyyy.MM.dd HH:mm:ss", Locale.KOREA );
Date currentTime = new Date ( );
String dTime = formatter.format ( currentTime );
System.out.println ( dTime );



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


GregorianCalendar today = new GregorianCalendar ( );


int year = today.get ( today.YEAR );
int month = today.get ( today.MONTH ) + 1;
int yoil = today.get ( today.DAY_OF_MONTH );


GregorianCalendar gc = new GregorianCalendar ( );


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


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


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


TimeZone jst = TimeZone.getTimeZone ("JST");
Calendar cal = 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초 


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


Date myDate = new Date ( "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"로 바꾸기


SimpleDateFormat formatter_one = new SimpleDateFormat ( "EEE, dd MMM yyyy hh:mm:ss",Locale.ENGLISH );
SimpleDateFormat formatter_two = new SimpleDateFormat ( "yyyy-MM-dd" );


String inString = "Sun, 5 Dec 1999 00:07:21";


ParsePosition pos = new ParsePosition ( 0 );
Date frmTime = formatter_one.parse ( inString, pos );
String outString = formatter_two.format ( frmTime );


System.out.println ( outString );



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


Date conFromDate = new Date();
long ttl = conFromDate.parse ( "Dec 25, 1997 10:10:10" );
System.out.println ( ttl ); //예 938291839221


Date today = new Date ( ttl );
DateFormat format = DateFormat.getDateInstance ( DateFormat.FULL,Locale.US );
String formatted = format.format ( today );
System.out.println ( formatted );



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

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


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


//iDay 에 입력하신 만큼 빼거나 더한 날짜를 반환 합니다.
import java.util.*;


public String getDate ( int iDay )
{
Calendar temp=Calendar.getInstance ( );
StringBuffer sbDate=new StringBuffer ( );


temp.add ( Calendar.DAY_OF_MONTH, iDay );


int nYear = temp.get ( Calendar.YEAR );
int nMonth = temp.get ( Calendar.MONTH ) + 1;
int nDay = 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 );


return sbDate.toString ( );
}



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


Calendar cal = 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 ( int month = 1; month <= 12; month++ )
{
GregorianCalendar cld = new GregorianCalendar ( 2001, month - 1, 1 );
System.out.println ( month + "/" + cld.getActualMaximum ( Calendar.DAY_OF_MONTH ) );
}


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


GregorianCalendar today = new GregorianCalendar ( );
int maxday = today.getActualMaximum ( ( today.DAY_OF_MONTH ) );
System.out.println ( maxday );


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


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


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


Calendar calendar = Calendar.getInstance ( );
calendar
.set ( 1999, 0, 1 );
int maxDays = calendar.getActualMaximum ( Calendar.DAY_OF_MONTH );


어제 날짜 구하기

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

어제 날짜 구하기2


import java.util.*;


public static Date getYesterday ( Date today )
{
if ( today == null )
throw new IllegalStateException ( "today is null" );
Date yesterday = new Date ( );
yesterday
.setTime ( today.getTime ( ) - ( (long) 1000 * 60 * 60 * 24 ) );


return yesterday;
}



내일 날짜 구하기


Date today = new Date ( );
Date tomorrow = new Date ( today.getTime ( ) + (long) ( 1000 * 60 * 60 * 24 ) );


내일 날짜 구하기2


Calendar today = Calendar.getInstance ( );
today
.add ( Calendar.DATE, 1 );
Date tomorrow = today.getTime ( );


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


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


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


//DAY_OF_WEEK리턴값이 일요일(1), 월요일(2), 화요일(3) ~~ 토요일(7)을 반환합니다.
//아래 소스는 JSP일부입니다.
import java.util.*;


Calendar cal= Calendar.getInstance ( );
int day_of_week = cal.get ( Calendar.DAY_OF_WEEK );
if ( day_of_week == 1 )
m_week
="일요일";
else if ( day_of_week == 2 )
m_week
="월요일";
else if ( day_of_week == 3 )
m_week
="화요일";
else if ( day_of_week == 4 )
m_week
="수요일";
else if ( day_of_week == 5 )
m_week
="목요일";
else if ( day_of_week == 6 )
m_week
="금요일";
else if ( day_of_week == 7 )
m_week
="토요일";



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


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


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

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


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


import java.io.*;
import java.util.*;


Date today = new Date ( );
Calendar cal = Calendar.getInstance ( );
cal
.setTime ( today );// 오늘로 설정.


Calendar cal2 = Calendar.getInstance ( );
cal2
.set ( 2000, 3, 12 ); // 기준일로 설정. month의 경우 해당월수-1을 해줍니다.


int count = 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


import java.io.*;
import java.util.*;


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


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;


return nTotalDate1-nTotalDate2;
}


public static void main ( String args[] )
{
System.out.println ( "" + GetDifferenceOfDate (2000, 6, 15, 1999, 8, 23 ) );
}
}



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


File f = new File ( directory, file );


Date date = new Date ( f.lastModified ( ) );
Calendar cal = 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년정도의 날짜를 출력해 주고 싶은데요.


SimpleDateFormat sdf = new SimpleDateFormat ( "yyyy-mm-dd" );
Calendar c = Calendar.getInstance ( );


for ( int i = 0; i < 48; i++ )
{
c
.clear ( );
c
.set ( 2000, 1, 3 - ( i * 7 ) );
java
.util.Date d = c.getTime ( );
String thedate = sdf.format ( d );
System.out.println ( thedate );
}



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

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

문제소스:


public void run ( )
{
while ( true )
{
try{
timer
.sleep ( 60000 );
}
catch ( InterruptedException ex ) { }


lblTimeDate.setText ( fGetDateTime ( ) );
repaint
( );
}
}


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;


DateCheck ( String dt )
{
try
{
DateFormat df = DateFormat.getDateInstance ( DateFormat.SHORT );
df
.setLenient ( false );
Date dt2 = df.parse ( dt );
}
catch ( ParseException e ) { this.dateValidity = false; }
catch ( IllegalArgumentException e ) { this.dateValidity = false; }
}


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


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()));
else if (aDate.before(bDate)) // aDate가 bDate보다 작을 경우 출력
System.out.println("시스템 날짜보다 앞일 경우 aDate = " + dateForm.format(aDate.getTime()));
else // aDate = bDate인 경우
System.out.println("같은 날이구만");
}
}

728x90
반응형
:
Posted by mapagilove
반응형