안녕하세요. 제임스 입니다. 


구글 플레이 스토어에서 앱을 다운받으려고 하는데 

다운로드 대기 중... 

이라는 문구만 보이면서 진행이 안되는 경우가 종종 있습니다. 

이럴때 해결하는 방법을 포스팅 하고자 합니다. 


걸스크라운 이라는 앱을 설치 하려고 합니다. 

보시는 바와 같이 다운로드 대기 중... 상태 입니다. 


설정 앱 아이콘을 찾아 실행 합니다. 



애플리케이션 (설치된 앱 목록가져오기) 을 선택 합니다. 



Google Play 스토어 앱을 찾아 클릭 합니다. 



저장공간을 클릭 합니다. 



데이터 삭제를 실행 합니다. 


이렇게 하면 Google Play 스토어에 저장되어 있던 

모든 데이터들이 삭제 됩니다. 

로그인 되어 있던 구글 계정도 로그아웃 되어 버립니다. 


앱을 재실행 후 꼭 구글 계정으로 다시 로그인 해줍니다. 



다시 설치를 진행 하면... 

위와 같이 정상적으로 다운로드를 하게 됩니다. 



더이상 다운로드 대기 중... 상태에서 

멘붕 상태로 기다릴 필요 없겠죠? ^^


앱이 다운로드가 안될 때 위와 같은 방법으로 

간단하게 해결 가능 합니다.



 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D



블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,



안녕하세요. 제임스 입니다. 


크롬 개발자 도구 사용 시 여러가지 유용한 설정들이 있어 소개 하고자 합니다. 

그렇다면 설정 화면 진입 하는 방법 부터 알아야 겠죠? ^^


■ 크롬 개발자도구 설정 (Settings) 열기


1. 개발자 도구의 메뉴버튼 > Settings 


2. 단축키 F1 클릭


1번 또는 2번 방법을 이용하면 아래와 같이 설정(Settings) 화면을 보실 수 있습니다. 



■ Dark 테마 적용하기


개발자 도구의 기본 테마는 Light 로 흰색 배경으로 되어 있습니다. 

이클립스 사용 하시던 분들 중 배경 테마를 Dark 로 설정해서 사용 하시는 분들 많으실 텐데요. 

크롬 개발자 도구에서도 Dark 테마를 선택 할 수 있습니다. 



Settings > Preferences > Appearance > Theme 에서 Dark 를 선택 하시면 됩니다. 



Dark 테마가 적용된 개발자 도구 모습입니다. 멋있죠? 

개발은 폼으로 하는게 아니지만... 그래도 이왕이면 멋있는게 좋죠 ^^



■ 캐싱 사용하지 않기 (Disable Cache)


개발중 정말 귀찮은 일 중 하나가 js 파일등을 적용 시 캐시 때문에 바로 적용이 안되어 인터넷 사용 기록 삭제를 통해 캐시를 지워 주는 일입니다. 일반 사용자의 경우라면 캐싱을 하는 것이 인터넷 사용 환경 상에서 잇점이 많지만 개발자 입장에서는 특별한 경우가 아니라면 캐싱을 할 필요가 거의 없습니다. 

그래서 캐싱을 사용하지 않도록 하는 방법이 있습니다. 


Settings > Preferences > NetWork > Disable cache (while DevTools is open) 


while DevTools is open 이라고 되어 있습니다. 즉, 개발자 도구가 열려 있는 상태에서는 캐싱을 하지 않습니다. 

정말 정말 유용한 기능이고 개발중이라면 특별한 케이스를 제외하고는 꼭 사용 하셔야 하는 기능입니다. 



■ 콘솔패널 타임스탬프 활성화


Console 패널에서 console log 등이 표기 될때 기본은 아래와 같이 시간 정보가 없습니다. 


Console 패널에 로그가 남은 시간 정보를 알고 싶다면 아래와 같이 Console 항목의 Show timestamps 를 선택하면 됩니다. 


Settings > Preferences > Console > Show timestamps 


타임 스탬프를 활성화 하면 위와 같이 로그가 남은 시간을 확인 하실 수 있습니다. 



■ Blackboxing


이 블랙박싱이라는 생소한 이름의 설정은 자바스크립트 디버깅 시 아주 아주 유용한 설정입니다. 


개발 시개발자 개인이 작성한 코드 이외의 외부 라이브러리를 호출 하는 경우가 있습니다. 디버깅 시 이 외부 라이브러리 스택도 찾아 들어가는 작업을 하게 되는데요. 직접 개발한 부분이 아니므로 (신뢰 할 수 있는 라이브러리의 경우 디버깅 하지 않아도 되므로...) 디버깅을 하지 않도록 설정 할 수 있습니다. 

이때 사용 하는 것이 바로 Blackboxing 입니다. 


Settings > Blackboxing > Framework Blackbox Patterns


Add pattern... 버튼을 클릭 합니다. 


외부 라이브러리로 jquery-1.12.4.min.js 파일을 사용하고 있다고 가정 했을때

jqeury 로 시작하는 .js 파일을 블랙박싱 해주겠다는 의미로 위와 같이 입력 후 Add 버튼을 클릭하여 완료 해줍니다. 


Blackbox (블랙박싱) 목록에 jquery 가 보이며 이후 디버깅 시 jqeury 관련 스택은 스킵하게 됩니다. 


Blackbox content scripts 는 항상 체크 해두는게 좋습니다. 



■ Devices (에뮬레이터 단말기 추가 삭제)


Devices 탭에서는 에뮬레이터용 단말기를 추가 삭제 할 수 있습니다. 

여기에 등록된 단말기 정보는 모두 프리셋 된 정보들입니다. 

물론 Add Custom Device 기능을 통해 원하는 단말 설정 및 테스트 에뮬레이터 생성이 가능합니다. 

(이와 관련하여 추후 좀더 자세히 다루도록 하겠습니다.)


Settings > Devices > Emulated Devices





■ Shortcuts (단축키 정보)


크롬 개발자도구에서 사용하는 단축기 정보를 확인 할 수 있습니다. 

많이 사용하는 단축키들은 외우고 있으면 좋겠죠? ^^


Settings > Shortcuts > Shortcuts




설정에서 개인적으로 많이 사용하거나 꼭 필요하다고 생각되는 컨텐츠 위주로 내용을 정리 했습니다. 

웹 개발에 많은 도움이 될것이라 생각 되네요 :)



※ 이 글은 크롬버전 63.0.3239.132 (공식빌드) 기준으로 작성 했습니다. 




 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D



블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,



안녕하세요. 제임스 입니다. 


개발자 도구 (DevTools) 를 이용 할 때 Dock 의 위치를 원하는 곳으로 지정 할 수 있습니다. 

어떻게 하는지 방법을 알아 보겠습니다. 



■ Dock 위치 지정하기



DevTools 의 설정버튼 ()을 클릭 시 Dock Side 항목이 표기 됩니다. 

이때 우측 사각형이 칠해져 있는 모양을 선택 시 Dock 이 에뮬레이터 우측에 위치하게 됩니다. 



Dock Side 항목 중 하단 사각형이 칠해진 아이콘을 선택 시 Dock 이 에뮬레이터 아래에 위치 합니다. 



Dock Side 항목 중 좌측 사각형이 칠해져 있는 모양을 선택 시 Dock 이 에뮬레이터 좌측에 위치합니다. 



마지막으로 Dock Side 항목 중 사각형 두개가 겹쳐 진듯한 아이콘을 클릭 시 Dock 과 에뮬레이터가 별개의 윈도우로 분리되어 표시 됩니다. 



개발 하는 화면에 맞게 또는 개발자의 취향이나 편의에 따라 원하는 방식대로 Dock 위치를 지정하여 사용 할 수 있습니다. 




 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D



블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,

안녕하세요. 제임스 입니다. 


개인적으로 양꼬치를 참 좋아 합니다. 

지인들 또는 친한 직장 동료들과 술을 마실때는 양꼬치를 자주 추천 합니다. 

물론 양꼬치를 싫어 하는 분들도 있어 못갈때도 있지만 우선 지르고 보는거죠 ㅋ


저는 회식 또는 술자리는 거의 대부분 

명동, 을지로입구, 을지로3가, 종각 및 광화문 일대에서 

하다보니 이 일대 양꼬치 집은 여기 저기 참 많이 다녀 봤습니다. 


그중에서도 가장 좋아 하는 맛집이 하나 있어 소개 드립니다. 


명동역 근처에 있는 양꼬치구이 촨 이라는 집입니다.


작은 간판인데요...

쓸데 없이 커다란 간판이 달린 것 보다 뭔가 더 있어 보입니다.

저만 그런가요? ㅋ


양꼬치와 양늑간살을 시켰는데 양꼬치 부터 나왔습니다. 



바로 뒤따라 나온 양 늑간살!!!

양꼬치도 맛나지만 제 취향은 양 늑간살입니다 ㅎㅎ



양꼬치구이 부터 불판에 올리고...



불판에 올라간 양꼬치구이를 제한 나머지와 양 늑간살 같이 찍어 봤습니다. 



양꼬치구이를 먹을때면 꼭 나오는 양념 (좌측) 과 쯔란(우측) 입니다. 

쯔란은 향이 강한 향신료 인데요. 

너무 강해서 못드시는 분들이 생각보다 많습니다.

처음 입문 하실때는 정말 살짝만 찍어 드세요 ㅎㅎ;


저는 쯔란을 아주 아주 많이!!! 사랑 하므로 

항상 제 옆자리에 쯔란 통을 놔 달라고 부탁을 하고 먹습니다. ㅋㅋ


양꼬치 하면 칭따오죠? 

촨 에서는 항상 사진 찍을때 마다....

저기까지가 끝입니다 ㅠㅠ


칭따오가 나오는 순간....

양꼬치구이가 익기 시작 하는 순간... 

제 휴대폰은 주머니 속으로 사라 집니다 ㅎㅎ;;


조금만 방심하면 한판이 다 구워 지는 동안

고기 한점 못먹고 끝나는 경우가 많습니다....

나쁜 사람들 ㅠㅠ 좀 기다려 주지....



양꼬치구이가 12,000원 

양 늑간살이 18,000원

양 갈비가 22,000원 

꿔바로우가 16,000원


그리고 제가 개인적으로 좋아 하는 (이건 호불호가 강합니다)

온면이 6,000원 입니다. 


다들 좋아 하는 메뉴 인지라 그때 그때 기분에 따라 시키는 메뉴는 달라지지만

양꼬치구이와 양늑간살은 항상 기본이죠 ㅎㅎ



제가 생각하는 양꼬치구이집의 정석은 바로 촨이 아닌가 생각 됩니다. 


다만 여기는 한가지 아쉬운 점이 있는데요....

예약을 할 수 없는 상황일때는 자리 잡기가 생각보다 어렵습니다. 

좌석수가 많지 않기 때문입니다. 


미리미리 예약을 하시거나 아예 식사시간을 피해서 가시면 

마음 편하게 양꼬치구이를 드실 수 있을겁니다. 



P.S. 이 글은 해당 사업자로 부터 어떠한 지원이나 보상도 받지 않고 사비로 결제했습니다. 





'먹거리' 카테고리의 다른 글

[ 명동 맛집 ] Pho Duck 포덕 (이베리코 돼지고기)  (468) 2018.02.28
을지로3가 평래옥  (488) 2018.02.14
[명동 맛집] 풍미  (4) 2017.09.17
[명동 맛집] 장인닭갈비  (4) 2017.09.15
[의정부 맛집] 용천통닭  (4) 2017.09.12
블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,



안녕하세요. 제임스 입니다. 


이번에는 크롬 개발자도구 (Chrome DevTools) 의 Device Mode 사용하는 법에 대해 알아 보겠습니다. 



■ Device Mode 란? 

Device Mode 는 모바일 브라우저 개발을 위해 지원 하는 기능으로 다양한 기기와 기능을 시뮬레이션 할 수 있습니다. 

즉, 실 단말에서 테스트를 하는 것이 아니라 PC 크롬 브라우저의 Device Mode 를 ON 하여 모바일 단말 없이 모바일 브라우저의 기능을 사용 및 테스트 할 수 있습니다. 



■ Device Mode 전환하기


1. Device Mode 전환은 아래와 같이 버튼 하나만 클릭 하면 ON / OFF 가 가능합니다. 


2. 단축키를 이용하여 ON / OFF 를 할 수 있습니다. 


Windows & Linux --> Ctrl + Shift + M

Mac --> Command + Shift + M


Device Mode 아이콘이 파란색 () 이면 ON 상태

Device Mode 아이콘이 회색 () 이면 OFF 상태 입니다. 




■ Device Mode 사용하기


우리가 많이 사용하는 포털 사이트 하면 네이버가 떠오르는 분들이 많을 것 같습니다. 

그래서 www.naver.com (PC 홈페이지) 를 이용하여 Device Mode 를 활성화 / 비활성화 해보겠습니다. 


네이버 PC 홈페이지에 접속 후 DevTools 를 실행 했습니다. 

Device Mode 아이콘이 회색으로 아직 모바일 설정이 아님을 알 수 있습니다. 


우측 Device Mode 아이콘이 푸른색이 되었습니다. Device Mode 가 ON (활성화) 된 상태 입니다. 

푸른색 박스로 표기 한 부분 보시면 현재 Device Mode 가 Galaxy S5 로 잡혀 있는 것이 보입니다. 

이와 관련된 내용은 차후 더 자세히 설명 하겠습니다. 


화면만 작아 진것 같이 보이지 페이지 자체는 네이버 PC 홈페이지가 그대로 열려 있습니다. 

이는 이전 페이지를 호출 한 상태 그대로 Device Mode 만 변경했기 때문입니다. 

휴대폰 브라우저에서 네이버 PC 홈페이를 열었다고 생각하시면 됩니다.



화면은 F5 를 누르거나 주소창을 클릭 후 엔터키를 쳐서 다시 화면을 로드 하면 주소가 www.naver.com 에서 m.naver.com 으로 변경된 것을 확인 하실 수 있습니다. 


현재 브라우저의 User Agent 값은 아래와 같습니다. 

user-agent:
Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Mobile Safari/537.36


네이버 홈페이지에서 현재 브라우저 User Agent 값을 읽었는데 Mobile 이고 Android 5.0 이라고 했습니다. 당연히 모바일 단말로 인식하고 호출 URL 을 모바일 전용 홈페이지인 m.naver.com 으로 옮겨 준것을 알 수 있습니다. 



모바일 웹 개발 시 Device Mode 를 적극 활용 하면 편하게 개발을 하실 수 있을 겁니다. 




 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D




블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,



안녕하세요. 제임스 입니다. 


크롬을 이용하여 웹 개발 시 꼭 필요 한것 중 한가지를 들자면 바로 Chrome DevTools (크롬 개발자 도구) 입니다.

디버깅 도구, 네트워크 상태 체크, 메모리, 보안, 퍼포먼스 체크 및 콘솔 등을 지원하는 강력한 개발 툴입니다. 


오늘은 이 Chrome DevTools 실행하는 방법을 알아 보겠습니다. 




■ Chrome DevTools (개발자 도구) 열기



1. Chrome 메뉴에서 도구 더보기 > 개발자 도구 를 선택하여 활성화 할 수 있습니다. 


Chrome 메뉴 선택 (크롬 브라우저 우측 상단)


도구 더보기 클릭


개발자 도구 선택



2. 마우스 우클릭 > 검사 를 선택하여 활성화 하는 방법


마우스 우클릭 후 검사 선택 



3. 단축키를 사용 하는 방법


Windows --> Ctrl + Shift + I (영문자 아이)

Mac --> Command + Option + I (영문자 아이)



크롬 개발자 도구를 이용하면 개발이 한결 편해 지는 것을 느낄수 있습니다. 

관련 내용은 지속적으로 정리해서 올리겠습니다. 



 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D



블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,



안녕하세요. 제임스 입니다. 


이번에는 User-Agent 에 대해 정리해 보겠습니다. 


자바 스크립트를 사용하다 보면 단말정보에 따라 또는 브라우저에 따라 상이한 동작을 하게 만들고 싶다거나 브라우저 별로 지원하는 함수가 달라 다르게 작업해야 하는 등의 이슈 사항들이 생기게 됩니다. 

그때 이 User-Agent 라는 값을 이용하여 사용 단말 정보나 브라우저 정보를 가져와 정상동작 하도록 작업 할 수 있습니다. 


User Agent 값을 가져오기 위해 Navigator 객체를 이용합니다. 

navigator 객체는 아래와 같은 프로퍼티를 제공하고 있습니다. 


navigator.appName

navigator.appVersion

navigator.userAgent

navigator.appCodeName

navigator.platform


이중 우리가 원하는 프로퍼티가 userAgent 입니다. 


1
2
3
4
5
6
7
8
9
10
11
if (navigator.userAgent.match(/iPad/i)){
        // 아이패드
}else if (navigator.userAgent.match(/Tablet/i)){
        // 안드로이드 테블릿
else if(navigator.userAgent.match(/Android/i)){
        // 안드로이드 OS
else if(navigator.userAgent.match(/iPhone|iPod/i)){
        // 아이폰 & 아이팟
else {
        // 기타 PC 브라우저
}
cs

위와 같이 navigator.userAgent 값을 이용하여 단말을 분류 및 원하는 작업을 별도 처리 할 수 있습니다. 


https://www.whoishostingthis.com/tools/user-agent/

위 링크로 이동하시면  User Agent 값을 확인 하실 수 있으며 User Agent 에대한 더 많은 정보를 얻으실 수 있습니다. ^^




 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D



블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,



안녕하세요. 제임스 입니다. 


이번에는 For loop 중에서도 "향상된 For 문" (Enhanced For Loop) 에 대해 알아 보겠습니다. 


■ 기존 For Loop 


기존 For 문은 아래와 같습니다.


for( initialization; termination; increment ){

// statement(s)

}


1
2
3
for (int i = ; i < ; i++) {
    System.out.println("i = "+i);
}
cs


위 예문과 같이 변수 초기화, 종료조건, 변수 증감치에 대한 정의를 하는 것이 우리가 기존에 알고 있던 for loop 입니다. 


실행 결과는 아래와 같습니다. 


i = 0

i = 1

i = 2

i = 3

i = 4




■ 향상된 For 문 (Enhanced For Loop)


for ( declaration : expression ) {

// statement(s)

}


구조가 우리가 알고 있던 For loop 과 다릅니다. Java 5.0 이상부터 지원하는 for 문입니다. 

declaration > 변수 선언 

expression > 배열 또는 배열을 리턴하는 함수 (배열의 값을 변경 할 수는 없고 사용만 가능합니다)


예제를 보겠습니다. 

1
2
3
4
String[] strArr = {"향상된""FOR""LOOP""테스트"};
for(String arr : strArr){
    System.out.println(arr);
}
cs


위와 같은 형태로 배열을 사용하여 for 문을 돌립니다. 


실행 결과는 아래와 같습니다. 


향상된

FOR

LOOP

테스트



 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D




블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,

카드 포인트 통합 조회 및 현금화 하기


안녕하세요. 제임스 입니다. 


올해부터 신용카드 포인트를 현금화 하는것이 가능해 졌습니다. 


하지만 어떤 카드에 얼마나 많은 포인트가 적립되어 있는지 모르기 때문에

여신금융협회에서 카드 포인트 통합조회 서비를 시작합니다. 

이를 통해 보유 카드 포인트를 한번에 조회 하고

각 카드사의 포인트 이용페이지로 링크를 타고 이동 할 수 있습니다. 


https://www.cardpoint.or.kr/

위 링크를 통해 여신금융협회 카드 포인트 통합조회 사이트로 이동합니다.



카드 포인트 통합조회 서비스 메인화면입니다.

통합조회 버튼을 클릭 합니다. 




이름, 주민번호, 보안문자(입력란 좌측 문자입력)를 입력하고 조회를 합니다.




조회를 원하는 카드 하단 체크 박스를 클릭하시고 

카드포인트 통합조회 버튼을 클릭 하시면 됩니다. 


만약 어떤 카드를 가지고 있는지 잘 모르시겠다면...

전부 체크 하시면 됩니다. ^^ 




조회 결과 페이지 입니다. 

카드사별 잔여 포인트 / 소멸예정 포인트 / 소멸예정월 등의 

항목을 확인 하실 수 있습니다. 


포인트 이용안내 바로가기 버튼을 클릭하여 

카드사 포인트 이용안내 페이지로 이동 하시고 

제공하는 현금 전환방법을 따르시면 됩니다. 




해당 카드 회원이 아닌 경우 위와 같이 

"자사회원이 아닙니다" 라는 오류 메세지를 확인 하실 수 있습니다. 





이용 안내 페이지도 제공하고 있습니다. 




각 카드사 홈페이지나 애플리케이션을 통해 

포인트를 현금으로 전환 한 후 가까운 ATM 에서 찾을 수 있다고 합니다. 


단, 1만 포인트 미만일 경우 

ATM 에서 출금할 수 없으므로 

카드대금 결제 시 또는 카드대금 출금 계좌 입금등의 방법을 

이용하시면 좋을 것 같습니다. 


이제 더 이상 몰라서 사라지는 카드 포인트는 없어야 겠죠? ^^





 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D



블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,




안녕하세요. 제임스 입니다. 


이번에는 두 날짜 간의 차이 구하는 방법에 대해 정리 해보겠습니다. 


몇월 몇일 부터 몇월 몇일 까지 몇일 차이인지 구하거나 특정일 까지 D-Day 를 구하거나 할때 사용 할 수 있는 방법입니다. 


우선 두 날짜간의 차이를 알기 위해 Calendar 클래스의 getTimeInMills() 라는 함수를 이용하여 천분의 일초 단위 까지 반환 합니다.

그리고 이 초 단위 값을 다시 일단위로 변환하여 최종적으로 두 날짜 간 일 차이를 구할 수 있습니다. 


아래 예제를 보시면 좀더 이해가 편하실 겁니다. 


1
2
Calendar baseCal = new GregorianCalendar(2018, Calendar.JANUARY, 11); // 기준 날짜 2018.1.11
Calendar targetCal = new GregorianCalendar(2018, Calendar.MAY, 24);// 비교대상 날짜 2018.5.24 
cs


기준 날짜를 2018년 1월 11일 로 비교 대상 날짜를 2018년 5월 24일 로 설정 했습니다. 


이제 두 날짜간 차이를 getTimeInMills() 함수를 이용하여 천분의 일초 단위로 변환 및 차를 구하겠습니다. 


1
long diffSec = (targetCal.getTimeInMillis() - baseCal.getTimeInMillis())/1000;
cs

천분의 1초 단위 이므로 1000 으로 나눠 초 단위로 변환 했습니다.


이제 다시 초단위를 일 단위로 변환 하겠습니다. 


1
long diffDays = diffSec / (24*60*60);
cs

1일은 24(시간) * 60(분) * 60(초) 초 이므로 diffSec 값에서 24*60*60 한 값을 나누면 일로 변환 됩니다. 


1
System.out.println("두 날짜간의 일수 차 = "+diffDays+" 일");
cs

위와 같이 결과 값을 프린트하면 아래와 같은 값을 리턴 합니다. 


두 날짜간의 일수 차 = 133 일


정말 133일 차이가 나는지는 앞서 포스팅했던 내용과 같이 기준날짜에 133일을 더하거나 비교대상 날짜에 133일을 빼면 알 수 있겠죠? 


1
2
3
4
5
6
7
8
9
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
System.out.println("----------------------------------------");
System.out.println("기준 날짜 = "+sdf.format(baseCal.getTime()));
System.out.println("비교 대상 날짜 = "+sdf.format(targetCal.getTime()));
System.out.println("----------------------------------------");
baseCal.add(Calendar.DAY_OF_MONTH, (int)diffDays);
System.out.println("기준날짜에 "+diffDays+" 일 만큼 더한 날짜 = "+sdf.format(baseCal.getTime()));
targetCal.add(Calendar.DAY_OF_MONTH, -(int)diffDays);
System.out.println("비교 대상 날짜에 "+diffDays+" 일 만큼 뺀 날짜 = "+sdf.format(targetCal.getTime()));
cs


yyyy/MM/dd 형태로 기준 날짜와 비교 대상 날짜를 먼저 프린트 합니다. 

이후 기준 날짜에 133일을 더하고 비교대상 날짜에서 133일 뺍니다. 


결과는 아래와 같습니다. 


-------------------------

기준 날짜 = 2018/01/11

비교 대상 날짜 = 2018/05/24

-------------------------

기준 날짜에 133 일 만큼 더한 날 = 2018/05/24

비교 대상 날에 133 일 만큼 뺀 날 = 2018/01/11


제대로 구해진것이 확인 됩니다. 



여기서 주의 할 점이 하나 있습니다. 

만약 기준 날짜를 Calendar.getInstance() 로 할 경우 오차가 생길 수 있습니다. 

천분의 일초 까지 계산을 하기 때문에 올림/내림의 변수가 존재 하여 원치 않는 결과 값이 나올 수 있습니다. 


아래 예제를 보여 드리겠습니다. 


1
2
3
Calendar baseCal1 = Calendar.getInstance(); // 기준 날짜 
Calendar baseCal2 = new GregorianCalendar(2018, Calendar.JANUARY, 11); // 기준 날짜 2018.1.11
Calendar targetCal = new GregorianCalendar(2018, Calendar.MAY, 24);// 비교대상 날짜 2018.5.24
cs


테스트 한 현재 시간 (2018년 1월 11일 오전 1시 59분) 으로 처음 예제와 동일한 날짜 이지만 시간이 초단위까지가 차이가 납니다. 


1
2
3
System.out.println("baseCal 초단위 값 ==> "+baseCal1.getTimeInMillis());
System.out.println("baseCal2 초단위 값 ==> "+baseCal2.getTimeInMillis());
System.out.println("targetCal 초단위 값 ==> "+targetCal.getTimeInMillis());
cs


위 코드 결과는 아래와 같습니다. 


baseCal1 초단위 값 ==> 1515603810414

baseCal2 초단위 값 ==> 1515596400000

targetCal 초단위 값 ==> 1527087600000


Calendar.getnstance() 한 값을 기준값 또는 비교값으로 설정 할 경우 +/- 1일 정도의 오차가 발생 할 수 있습니다. 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Calendar baseCal = Calendar.getInstance(); // 기준 날짜 
Calendar targetCal = new GregorianCalendar(2018, Calendar.MAY, 24);// 비교대상 날짜 2018.5.24 
 
long diffSec = (targetCal.getTimeInMillis() - baseCal.getTimeInMillis())/1000;
long diffDays = diffSec / (24*60*60);
 
System.out.println("두 날짜간의 일수 차 = "+diffDays+" 일");
 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
System.out.println("----------------------------------------");
System.out.println("기준 날짜 = "+sdf.format(baseCal.getTime()));
System.out.println("비교 대상 날 = "+sdf.format(targetCal.getTime()));
System.out.println("----------------------------------------");
baseCal.add(Calendar.DAY_OF_MONTH, (int)diffDays);
System.out.println("기준 날에 "+diffDays+" 일 만큼 더한 날 = "+sdf.format(baseCal.getTime()));
targetCal.add(Calendar.DAY_OF_MONTH, -(int)diffDays);
System.out.println("비교 대상 날에 "+diffDays+" 일 만큼 뺀 날 = "+sdf.format(targetCal.getTime()));
cs


위와 같이 Calendar.getInstance() 한 값을 기준으로 한 결과는 아래와 같습니다. 


두 날짜간의 일수 차 = 132 일

----------------------------------------

기준 날짜 = 2018/01/11

비교 대상 날짜 = 2018/05/24

----------------------------------------

기준 날짜에 132 일 만큼 더한 날짜 = 2018/05/23

비교 대상 날짜에 132 일 만큼 뺀 날짜 = 2018/01/12


분명 133일 차이가 나야 하는데 132일 차이가 나는 것으로 결과 값이 잘못 나옵니다. 

비교 대상이 잘못 되었기 때문이죠.


날짜 간의 비교를 해야 하는 경우라면 Calendar.getInstance() 대신 GregorianCalendar 를 이용하시거나 Calendar 클래스의 set 함수를 이용하여 원하는 날짜를 지정하는 것도 좋은 방법입니다. 



 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D




블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,