[안드로이드]SQLite date값 9시간 차이나는 문제 해결방법

2017. 10. 6. 00:39·IT기술 관련/모바일
반응형

 출처: http://soulduse.tistory.com/34 [프로그래밍좀비]


SQLite 관련 작업중 테이블에 현재 시간을 기본설정 값으로 넣으면 


우리나라 현재시간과 비교했을 때 9시간이 빠르게 나오는 현상이 발생했다.


아래는 SQLite 테이블을 만들고 기본값을 설정한 상태이다.

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table " + TABLE_NAME + " ("
+ IDX + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ REG_DATE1 + " DATETIME DEFAULT (datetime('now','localtime'))"
+ REG_DATE2 + " DATETIME DEFAULT (datetime('now'))"
+ REG_DATE3 + " DATETIME DEFAULT CURRENT_TIMESTAMP"
+ ");");
}



EX) 현재 우리나라 시간이 2016-04-26 17:46:49라고 했을때,


     위의 내용에대한 결과는 아래와 같이 출력된다.

REG_DATE1 : 2016-04-26 17:46:49
REG_DATE2 : 2016-04-26 10:46:49
REG_DATE3 : 2016-04-26 10:46:49


결과를 보면 


datetime('now','localtime')    // => 현재 우리나라 시간과 동일한 시간을 얻는다.

datetime('now')                // => 국제표준시간(UTC) 기준의 값을 출력

CURRENT_TIMESTAMP              // => 국제표준시간(UTC) 기준의 값을 출력


임을 알 수 있다.


SQLite 작성과 시간에 있어 삽질시간 단축에 도움이 되었으면 한다. ^^



++ 추가


SQLite에서 날짜를 표시하기 위한 함수는 아래의 5가지가 있다.

date(timestring, modifier, modifier, ...) : 날짜
time(timestring, modifier, modifier, ...) : 시간
datetime(timestring, modifier, modifier, ...) : 날짜+시간
julianday(timestring, modifier, modifier, ...) : 율리우스력 날짜
strftime(format, timestring, modifier, modifier, ...) : 포맷 지정

흔히 현재 날짜를 얻을 때 date, time, datetime을 자주 사용하게 된다.
이 함수에 'now' 문자열을 넣으면 현재 날짜와 시간을 얻을 수 있고, 이는 xCurrentTime 메소드가 제공해 주는 것이라고 SQLite 공식 페이지가 말하고 있다.(-_-;;)

즉, SELECT date('now'); 를 하면 현재 날짜가 '2011-12-25' 일 형식 으로 나오고,
SELECT datetime('now'); 를 하면 현재 날짜+시간(시:분:초)이 '2011-12-25 23:30:11' 형식으로 나온다.
단, 국제표준시간(UTC) 기준의 값을 출력한다.

우리나라의 표준 시간은 국제표준시+9 이기 때문에 시간이 틀리게 출력 된다.

해결 방법은 대략 두가지.

1. localtime 값을 이용한 현재시간 구하기 

SELECT datetime('now','localtime'); 


위와 같이 하면 국제표준시+9 가 된 우리나라 시간이 된다.

2. 시간 값 더하기 

SELECT datetime('now','+9 hours'); 


국제 표준시에 +9를 해 주면 우리나라 시간이 된다.


편한게 좋기 때문에 1번 추천.

더 자세한 정보는 SQLite 공식 페이지의 'Date And Time Functions' 페이지를 참조 하자.

'보고픈'님이 정리하신 SQLitet 날짜 관련 샘플

--UTC 기준의 현재 날짜/시간 
select datetime('now'); 
2010-08-25 04:01:46 

-- 로컬 기준의 현재 날짜/시간
select datetime('now','localtime'); 
2010-08-25 13:02:30

--현재 로컬 기준 시간에서 10분 3.5초를 더한 시간.
select datetime('now','localtime','+3.5 seconds','+10 minutes');
2010-08-25 13:14:15

--현재 로컬 시간에 3.5초를 더하고 날짜는 돌아오는 화요일 (weekday == 0 이 일요일입니다.)
select datetime('now','localtime','+3.5 seconds','weekday 2');
2010-08-31 13:05:39

--현재 달의 마지막 날짜
SELECT date('now','start of month','+1 month','-1 day','localtime');
2010-08-31

--2004-01-01 02:34:56초부터 현재까지의 총 초
SELECT strftime('%s','now') - strftime('%s','2004-01-01 02:34:56');
209785028

--현재날짜/시간 기준에서 올해 9번째달의 첫번째 화요일
SELECT date('now','start of year','+9 months','weekday 2');
2010-10-05

-- 날짜 포맷 스타일 변경 
select strftime("%Y/%m/%d %H:%M:%S",'now','localtime');
2010/08/27 09:17:22



출처: http://marga.tistory.com/578 [margalog]



참고 사이트

- http://stackoverflow.com/questions/381371/sqlite-current-timestamp-is-in-gmt-not-the-timezone-of-the-machine

- http://wiki.simplism.kr/programming:database:sqlite

- http://marga.tistory.com/578



반응형
저작자표시 (새창열림)

'IT기술 관련 > 모바일' 카테고리의 다른 글

[안드로이드] 리스트 뷰(ListView) 4. 컨텍스트 메뉴 달기(Context Menu)  (0) 2017.10.07
[안드로이드] 다중 CheckBox 에서 하나만 선택하게 하기  (0) 2017.10.07
[안드로이드] Fragment 에서 Toast 사용하기  (0) 2017.10.01
[안드로이드] 인터페이스를 활용한 container <-> fragment 데이터 교환  (0) 2017.09.29
[안드로이드] EditText에서 String값으로 가져오기 & EditText값이 공백인지 체크하기  (0) 2017.09.29
'IT기술 관련/모바일' 카테고리의 다른 글
  • [안드로이드] 리스트 뷰(ListView) 4. 컨텍스트 메뉴 달기(Context Menu)
  • [안드로이드] 다중 CheckBox 에서 하나만 선택하게 하기
  • [안드로이드] Fragment 에서 Toast 사용하기
  • [안드로이드] 인터페이스를 활용한 container <-> fragment 데이터 교환
호레
호레
창업 / IT / 육아 / 일상 / 여행
    반응형
  • 호레
    Unique Life
    호레
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 법률
        • 기본
        • 개인정보보호법
        • 정보통신망법
        • 전자금융거래법
        • 전자금융감독규정
        • 신용정보법
        • 온라인투자연계금융업법
      • 창업
        • 외식업 관련
        • 임대업 관련
        • 유통업 관련
        • 세무 관련
        • 마케팅 관련
        • 기타 지식
        • 트렌드
        • Youtube
      • IT기술 관련
        • 모바일
        • 윈도우
        • 리눅스
        • MAC OS
        • 네트워크
        • 빅데이터 관련
        • A.I 인공지능
        • 파이썬_루비 등 언어
        • 쿠버네티스
        • 기타 기술
      • 퍼블릭 클라우드 관련
        • Azure
        • GCP
        • AWS
      • 정보보안 관련
        • QRadar
        • Splunk
        • System
        • Web
      • 기타
        • 세상 모든 정보
        • 서적
      • 게임 관련
        • 유니티
      • 부동산
      • 맛집 찾기
        • 강남역
        • 양재역
        • 판교역
        • ★★★★★
        • ★★★★
        • ★★★
        • ★★
        • ★
      • 결혼_육아 생활
        • 리얼후기
        • 일상
        • 육아
        • 사랑
        • Food
      • 영어
        • 스피킹
        • 문법
        • 팝송
        • 영화
      • K-컨텐츠
        • 드라마
        • 영화
        • 예능
      • 독서
      • 프로젝트 관련 조사
        • 시스템 구축
        • 로그 관련
        • 웹
        • APT
        • 모의 해킹
        • DB
        • 허니팟
        • 수리카타
        • 알고리즘
        • FDS
      • 기업별 구내 식당 평가
        • 한국관광공사
        • KT telecop
        • KT M&S
        • KT powertel
        • KT cs 연수원
        • 진에어
      • 대학 생활
        • 위드윈연구소
        • 진로 고민
        • 채용정보
        • 자동차
        • 주식
        • 악성코드
        • 게임 보안
      • 쉐어하우스
  • 블로그 메뉴

    • 홈
    • 게임 관련
    • IT 기술 관련
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    복리후생
    AWS
    수제버거맛집
    이재곧죽습니다
    런치
    마케팅
    유니티
    무역전쟁
    보안가이드
    판교
    점심
    수제버거존맛
    쥬쥬랜드
    상호관세
    대통령
    수제버거
    돈까스
    판교역
    맛집
    판교맛집
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
호레
[안드로이드]SQLite date값 9시간 차이나는 문제 해결방법
상단으로

티스토리툴바