Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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 31
Tags more
Archives
Today
Total
관리 메뉴

맨땅에 코딩

SQLite 날짜/시간 함수 정리 - datetime 본문

카테고리 없음

SQLite 날짜/시간 함수 정리 - datetime

맨땅 2022. 7. 5. 11:42

목차

    반응형

     

     

    예를 들어 일요일 밤 6시부터 ~ 월요일 낮 2시 정도의 데이터를 얻고 싶었다.

     

    데이터는 측정이 됐는데 원하는 시간의 데이터가 제대로 표출이 안되서 함수를 뒤지다가 답도 찾고

     

    내가 알게된 방법들을 총 정리하고자 썼다.

     

    내 답은 맨 아래에 첨부하겠다.

     

     

     

    --------------------------------------------------출처 : https://marga.tistory.com/578 ---------------------------------------------------------------

     

    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

    출처: https://marga.tistory.com/578 [margalog:티스토리]

     

     

     

    SQLite 날짜/시간 함수에 대한 유효한 수정자

     

    Valid Modifiers for SQLite Date/Time Functions

    Below is a list of valid modifiers for date and time functions in SQLite. ModifierExampleNNN daysdate(‘now’, ‘+3 days’)NNN hoursdatetime(‘now’, ‘-3 hours’)NNN minutesdatetime(‘now’, ‘+3 minutes’)NNN.NNNN secondsdatetime(‘now’,

    database.guide

     

    예시

    다음은 위의 수정자를 사용한 결과를 보여주는 빠른 예입니다.

    .mode line
    SELECT 
      datetime('now'),
      date('now', '+3 days'),
      datetime('now', '+3 hours'),
      datetime('now', '+3 minutes'),
      datetime('now', '+30 seconds'),
      date('now', '+3 months'),
      date('now', '-3 years'),
      date('now', 'start of month'),
      date('now', 'start of year'),
      datetime('now', 'start of day'),
      date('now', 'weekday 6'),
      datetime('1588965525', 'unixepoch'),
      datetime('now', 'localtime'),
      datetime('now', 'utc');

    결과:

                        datetime('지금') = 2020-04-26 00:53:53 
                 date('지금', '+3일') = 2020-04-29 
            datetime('지금', '+3시간') = 2020- 04-26 03:53:53 
          datetime('지금', '+3분') = 2020-04-26 00:56:53 
         datetime('지금', '+30초') = 2020-04-26 00 :54:23 
               date('지금', '+3개월') = 2020-07-26 
                date('지금', '-3년') = 2017-04-26 
          date('지금', '월의 시작 ') = 2020-04-01 
           date('지금', '연초') = 2020-01-01 
        datetime('지금', '시작일') = 2020-04-26 00:00:00 
               날짜 ('지금', '요일 6') = 2020-05-02 
    datetime('1588965525', 'unixepoch') = 2020-05-08 19:18:45
           datetime('지금', '현지 시간') = 2020-04-26 10:53:53 
                 datetime('지금', 'utc') = 2020-04-25 14:53:53

     

     

     

    일요일 밤 6시부터의 데이터니 'now', 'localtime', 'weekday 0', '-7 days'로 우리나라 시간의 이번주 일요일 설정

    여기서 제일 중요한 'start of day' 로 하루의 시작 시간 00:00을 설정해준 후 원하는 시간을 더해주면 됩니다

     

    cursor = sql.rawQuery("SELECT * FROM MEMBER Where Testdate >= datetime('now','weekday 0', '-7 days','localtime', 'start of day', '+18 hours') AND Testdate <= datetime('now','weekday 0', '-6 days', 'localtime');", null);

     

    반응형