[SQL] SQLite는 : CURRENT_TIMESTAMP 기계의하지 시간대, GMT에
SQLSQLite는 : CURRENT_TIMESTAMP 기계의하지 시간대, GMT에
나는이 열 정의와 sqlite가 (V3) 테이블이 있습니다 :
"timestamp" DATETIME DEFAULT CURRENT_TIMESTAMP
이 데이터베이스가 살아 계심 서버는 CST 시간대에 있습니다. 내가 타임 스탬프 열을 포함하지 않고 내 테이블에 삽입 할 때, SQLite는 자동으로 그리니치 표준시의 현재 타임 스탬프하지 CST와 해당 필드를 채 웁니다.
CST에 있어야 저장된 타임 스탬프를 강제로 내 삽입 문을 수정하는 방법이 있나요? 다른 한편으로는 그래서 나는 CST에 저장된 타임 스탬프를 변환하는 나의 선택 SQL을 수정할 수있는 방법이있다, (경우에 데이터베이스가 예를 들어, 다른 시간대로 이동됩니다) GMT에 저장 아마 더 낫다 테이블에서 추출?
해결법
-
==============================
1.나는 sqlite가 문서 (https://www.sqlite.org/lang_datefunc.html)이 텍스트에서 발견 :
나는 sqlite가 문서 (https://www.sqlite.org/lang_datefunc.html)이 텍스트에서 발견 :
SELECT datetime(1092941466, 'unixepoch', 'localtime');
즉, 내 요구에 맞게처럼 조금 주위에 "날짜"기능을 변경 시도, 그래서보고,이와 상처하지 않았다 :
select datetime(timestamp, 'localtime')
당신의 시간대에 변환 할 수있는 올바른 방법이, 또는이 할 수있는 더 좋은 방법이있다 - 그것은 작동하는 것 같다?
-
==============================
2.단순히 기본값으로 로컬 시간을 사용합니다 :
단순히 기본값으로 로컬 시간을 사용합니다 :
CREATE TABLE whatever( .... timestamp DATE DEFAULT (datetime('now','localtime')), ... );
-
==============================
3.당신이해야 원칙적으로, 휴가는 GMT에서 데이터베이스에 타임 스탬프, 오직 변환에 / 당신이 사용자의 (안 서버의) 지역의 타임 스탬프로 변환 할 수있는 입력 / 출력, 로컬 시간에서.
당신이해야 원칙적으로, 휴가는 GMT에서 데이터베이스에 타임 스탬프, 오직 변환에 / 당신이 사용자의 (안 서버의) 지역의 타임 스탬프로 변환 할 수있는 입력 / 출력, 로컬 시간에서.
다음 작업을 수행 할 수 있다면 좋은 일 것입니다 :
SELECT DATETIME(col, 'PDT')
... 태평양 일광 절약 시간에 사용자의 출력 타임 스탬프. 불행하게도, 그 작동하지 않습니다. 이 SQLite는 튜토리얼에 따르면, 그러나 ( "다른 날짜 및 시간 명령"아래로 스크롤), 당신은 시간을 요구하고 오프셋 (시간) 같은 시간에 적용 할 수 있습니다. 당신이 알고한다면, 사용자의 시간대는 당신에게,있는 거 좋은 오프셋.
하지만, 일광 절약 규칙을 처리하지 않습니다 ...
-
==============================
4.로컬 datatime은 내가, 예를 들어, 모든 I 관리부터 내 데이터베이스 중 하나의 현지 시간을 저장 (원하고있는 (인정 드문) 경우였다 하루에 시간이 무엇이고 나는 어디를 추적하지 않습니다 시간대 ...)의 관점에서, 당신은 열을 정의 할 수 있습니다
로컬 datatime은 내가, 예를 들어, 모든 I 관리부터 내 데이터베이스 중 하나의 현지 시간을 저장 (원하고있는 (인정 드문) 경우였다 하루에 시간이 무엇이고 나는 어디를 추적하지 않습니다 시간대 ...)의 관점에서, 당신은 열을 정의 할 수 있습니다
"timestamp" TEXT DEFAULT (strftime('%Y-%m-%dT%H:%M','now', 'localtime'))
Y-는 % % % M- DT % H % M 부분은 물론 선택적이다; 내가 내 시간이 저장 될 좋아 다만 방법이다. [내 인상이 정확한지는 TEXT 또는 DATETIME 컬럼 선언의 데이터 유형으로 사용되는 정말 문제가 있는지 여부 않도록 또한,이 sqlite에는 "DATETIME"데이터 형식이 없습니다.]
-
==============================
5."NOT NULL시 기본 CURRENT_TIMESTAMP,"로 정의 된 열을 가진 경우 삽입 된 기록은 항상 UTC / GMT 시간으로 설정 얻을 것이다.
"NOT NULL시 기본 CURRENT_TIMESTAMP,"로 정의 된 열을 가진 경우 삽입 된 기록은 항상 UTC / GMT 시간으로 설정 얻을 것이다.
여기에 내 INSERT / UPDATE 문에서 시간을 포함하는 것을 방지하기 무슨 짓을했는지 :
--Create a table having a CURRENT_TIMESTAMP: CREATE TABLE FOOBAR ( RECORD_NO INTEGER NOT NULL, TO_STORE INTEGER, UPC CHAR(30), QTY DECIMAL(15,4), EID CHAR(16), RECORD_TIME NOT NULL DEFAULT CURRENT_TIMESTAMP) --Create before update and after insert triggers: CREATE TRIGGER UPDATE_FOOBAR BEFORE UPDATE ON FOOBAR BEGIN UPDATE FOOBAR SET record_time = datetime('now', 'localtime') WHERE rowid = new.rowid; END CREATE TRIGGER INSERT_FOOBAR AFTER INSERT ON FOOBAR BEGIN UPDATE FOOBAR SET record_time = datetime('now', 'localtime') WHERE rowid = new.rowid; END
작동하는지 테스트 확인합니다 ...
--INSERT a couple records into the table: INSERT INTO foobar (RECORD_NO, TO_STORE, UPC, PRICE, EID) VALUES (0, 1, 'xyz1', 31, '777') INSERT INTO foobar (RECORD_NO, TO_STORE, UPC, PRICE, EID) VALUES (1, 1, 'xyz2', 32, '777') --UPDATE one of the records: UPDATE foobar SET price = 29 WHERE upc = 'xyz2' --Check the results: SELECT * FROM foobar
희망이 도움이.
-
==============================
6.
SELECT datetime('now', 'localtime');
-
==============================
7.SELECT 날짜 (CURRENT_TIMESTAMP '의 현지')
SELECT 날짜 (CURRENT_TIMESTAMP '의 현지')
-
==============================
8.당신은 또한 단지의 strftime ()를 사용하여 타임 스탬프 시간 열을 변환 할 수 있습니다 :
당신은 또한 단지의 strftime ()를 사용하여 타임 스탬프 시간 열을 변환 할 수 있습니다 :
SELECT strftime('%s', timestamp) as timestamp FROM ... ;
당신은 제공합니다 :
"타임 스탬프"테이블 컬럼 CURRENT_TIMESTAMP DEFAULT로를 사용하여, 심지어 텍스트 필드 일 수있다.
의 strftime 없음 :
SELECT timestamp FROM ... ;
당신은 제공합니다 :
-
==============================
9.나는이 힘의 도움을 생각합니다.
나는이 힘의 도움을 생각합니다.
SELECT datetime(strftime('%s','now'), 'unixepoch', 'localtime');
-
==============================
10.현재 시간, 컴퓨터의 시간대에서 :
현재 시간, 컴퓨터의 시간대에서 :
select time(time(), 'localtime');
http://www.sqlite.org/lang_datefunc.html에 따라
-
==============================
11.시간 ( '지금', '의 현지') 및 날짜 ( '지금', '의 현지')가 작동합니다.
시간 ( '지금', '의 현지') 및 날짜 ( '지금', '의 현지')가 작동합니다.
from https://stackoverflow.com/questions/381371/sqlite-current-timestamp-is-in-gmt-not-the-timezone-of-the-machine by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL은 LEFT 3 개 테이블을 조인 (0) | 2020.05.07 |
---|---|
[SQL] 오라클 SQL의 테이블에 대한 모든 제약 조건의 이름을 표시 (0) | 2020.05.07 |
[SQL] PostgreSQL은 단어의 목록 중 어떤 LIKE 와일드 카드를 (0) | 2020.05.07 |
[SQL] 어떻게 LEFT OUTER 왼쪽 테이블에 존재보다 더 많은 레코드를 반환 가입 할 수 있습니까? (0) | 2020.05.07 |
[SQL] 어떻게 MySQL의 테이블에 열을 이동? (0) | 2020.05.07 |