리액트 네이티브 + express.js + mariadb를 사용해서 앱을 만들던 도중 timezone 관련 문제가 발생했다.
여러 곳에서 시간이 UTC와 UTC+9(한국시간)를 왔다갔다 했기 때문이다.
전부 UTC+9로 맞추고자 하였다.
express에서 mariaDB의 시간을 UTC+9로 설정했다.
heidsql에서 내용 확인했을 때, heidsql에서 select문 사용했을 때, 서버에서 mysql명령어 들어가서 select문 사용했을 때 모두 정상적으로 출력되었지만 express에서 select한 결과를 확인해보면 9시간 느리게 출력되었다.
그러다가 문득 express.js에서
const today = new Data();
console.log(today);
로 서버의 시간을 확인해보았다. 그 결과 UTC 시간이 나왔다 !! 이 시간을 바꿀 수 있는 방법을 찾아보았다.
express에서 moment-timezone 사용하기
하지만 이 방법을 express에서 한국시간을 사용할 수 있게 해주는 수단일 뿐이지 date()를 수정하는 것은 아니다.
무한 챗지피팅 결과 select문을 사용할 때 시간을 변경해서 select하는 방법을 찾았다.
var sql = "SELECT *, CONVERT_TZ(shot_date, 'UTC', 'Asia/Seoul') AS shot_date_korean FROM kbow.shots WHERE user_id = ? AND DATE_FORMAT(shot_date, '%Y-%m')=?"
express.js에서 사용한 코드 일부
CONVERT_TZ()함수를 사용해서 한국시간으로 변경해 출력이 가능하다 !!
++
++
++
++
++
++
++
++
++
++
++
++
++
변외로 삽질한 이유중 하나가 더 있는데, 리액트 네이티브에서 Date()함수를 사용하면 UTC시간이 출력된다.
const today = new Date(); //UTC 시간
하지만 아래와같이 접근하면 UTC-9시간으로 나온다 헐~
const year = today.getFullYear(); // 년도
const month = today.getMonth() + 1; // 월
const day = today.getDate(); // 날짜
today시간만 보고 9시간 더해주려고 today.setHours(today.getHours() + 9); 이걸 썼더니 today는 UTC+9가 출력됐지만 day는 한국시간에 9시간이 더 더해져 나왔따 ..