날짜를 00으로 설정하려고하는데 formatdatetime (날짜, 'Y-MM-dd HH : 00 : 00')을 사용하고 정상적인 날짜는 정상적으로 작동하지만 formatdatetime ('2017-01-01 12:27:27', 'Y-MM-dd HH : 00 : 00')을 사용하면 결과는 2016-01-01 12:00 : 00 대신 2017-01-01 12:00:00. 왜?H2 FORMATDATETIME() 01/01에 변화가 예상되지 않음
CREATE TABLE test_table (
timestamp DATETIME(3) NOT NULL
);
INSERT INTO test_table
VALUES
('2017-01-01 12:27:27'),
('2017-01-02 12:27:27'),
('2017-01-03 12:27:27');
SELECT FORMATDATETIME(timestamp, 'Y-MM-dd HH:00:00')
FROM test_table;
결과는 다음과 같습니다 :
FORMATDATETIME(TIMESTAMP, 'Y-MM-dd HH:00:00')
2016-01-01 12:00:00
2017-01-02 12:00:00
2017-01-03 12:00:00
왜이 동작 다음은
은 몇 가지 예제 코드?H2 1.4.192/JDK 1.7.0_80 및 H2 1.4.195/JRE 1.8.0_74를 사용해 보았습니다.
SELECT timestamp FROM test_table
의 출력은 정상입니다 :
TIMESTAMP ▼
2017-01-01 12:27:27.0
2017-01-02 12:27:27.0
2017-01-03 12:27:27.0
편집 :
출력 SELECT FORMATDATETIME(timestamp, 'Y-MM-dd HH:00:00 z', 'it', 'GMT') FROM test_table
에서 :
FORMATDATETIME(TIMESTAMP, 'Y-MM-dd HH:00:00 z', 'it')
2016-01-01 12:00:00 CET
2017-01-02 12:00:00 CET
2017-01-03 12:00:00 CET
출력 내가 문제를 발견했습니다, 그것은 로케일 것 같다 SELECT FORMATDATETIME(timestamp, 'Y-MM-dd HH:00:00 z', 'en', 'GMT') FROM test_table
:
FORMATDATETIME(TIMESTAMP, 'Y-MM-dd HH:00:00 z', 'en')
2017-01-01 12:00:00 CET
2017-01-02 12:00:00 CET
2017-01-03 12:00:00 CET
it
로캘의 경우 01/01/2017에 1 년을 뺀 반면 en
로캘에서는 그렇지 않습니다. 왜 이런 일이 일어 났는지 설명 할 수 있습니까? 로케일은 데이터 표현 만 변경하면 안됩니까? 그의 의견에 헨드릭에 의해 제안
H2 사용, 자바 SimpleDateFormat에 날짜를 포맷하기 : 확인 문제가 해결
문제점을 재현하려했지만 실패했습니다. 사용중인 H2 및 Java 버전에 대해 언급 할 수 있습니다. 또한,'SELECT timestamp FROM test_table; '의 결과는 무엇입니까? 그리고'FORMATDATETIME()'호출에서 목표 시간대를 지정하면 어떨까요? – hendrik
더 많은 개발로 편집 됨 – user1781028
H2는 내부적으로 SimpleDateFormat을 사용한다고 가정합니다. 'SimpleDateFormat'을 사용하여 문제를 재현 할 수 있습니까? – hendrik