Unix

sqlite 날짜 집어넣기

ForceCore 2009. 3. 20. 13:46
sqlite DB에 날짜를... 넣고 싶을 수도 있다. (sqlite2.x임... 3아님.)
필자는 이런 쿼리로 DB에 수동으로 날짜를 넣어봤다:

insert into homeworks (id,rev,title,body,created,due) values (1,1,'chapter9','ex3 ex4 ex5',DATETIME('NOW'),DATETIME('2009-03-30 12:00:00','utc'));

1. created 는 숙제가 issue된 시각. DATETIME('NOW'); 면 된다. UTC로 저장되었기 때문에, DB에서 정보를 빼올 때 잘 해야 한다. 모든 시간을 UTC로 저장해야 세계 어떤 곳에서 보아도 사용자의 localtime으로 보이기 때문에 좋을 것이다.

2. due date는 좀 이야기가 다르다. 단순히 now를 할 수도 없고...
DATETIME('2009-03-30 12:00:00','utc') : localtime으로 저 날짜 저 시각을 지정해주었다. 그러면 뒤의 'utc' parameter가 DB에는 UTC 시간으로 들어가게 해준다.

DATETIME('2009-03-30 12:00:00','localtime'): ?? DB엔 로컬 타임으로 넣겠다는건가?? 말이 좀 안 되는듯.

CakePHP에서 이것을 읽어서 display할 때 UTC->localtime 변환을 수행해야 한다.

function utc2local( $str, $offset ) {
    global $time;
    $date = strtotime( $str );
    $offset *= 3600;
    return date( 'Y-m-d H:i:s', $date+$offset );
}

필자의 코드는 대충 이렇다. 정말로 생각이 있는 코드라면 $offset도 variable로 어떻게 함수를 써서 알아내는 방법을 써야지 된다. 한국은 GMT+0900이니까 offset은 9. 하지만 필자의 코드에는 $offset = 9 로 그냥 하드코딩했다.

가장 좋은건 외국에서 접속하면 현지 시간으로 변환되어 보이는건데 그런건 사용자 접속 IP도 알아야 하고 복잡해서 하지 않을것임...;