"2020-05-11T02:00:00.000Z"
따라서 위의 5월 11일 오전 2시는 한국시간으로 5월 11일 11시로 봐야한다.
출처
1. Difference between UTC, GMT, Zulu Time, and Z
2. What exactly does the T and Z mean in timestamp?
mysql 날짜, 시간형식은 총 3가지이다.
date
: 날짜 (YYYY-MM-DD)datetime
: 날짜와 시간(YYYY-MM-DD hh:mm:ss)timestamp
: 날짜와 시간(YYYY-MM-DD hh:mm:ss[.fraction])datetime과 timestamp 둘다 날짜와 시간을 적을 수 있는데 가장큰 차이는 타임 존 반영 유무다.
datetime은 타임존 정보가 없고
timestamp는 mysql서버의 타임존에 맞춰서 UTC시간을 띄워준다
datetime 형식에 2020-08-25 11:00:00
라고 입력시
쿼리문으로 요청하면 서버의 타임존 정보가 무엇이든 2020-08-25 11:00:00
으로 나온다.
timestamp 형식에 2020-08-25 11:00:00
라고 입력시 현재 타임존이 Asia/Seoul
이라면
2020-08-25 02:00:00
으로 나온다. 출력된 시간은 UTC이기 때문에 2시라고 나왔지만 한국시간으로는 11시를 뜻한다.
출처
1. 11.2.2 The DATE, DATETIME, and TIMESTAMP(MYSQL Official Docs)
일단 아래 명령어로 mysql에서 현재 타임존을 확인하자.
select @@global.time_zone, @@session.time_zone,@@system_time_zone;
이렇게 나온다면 한국 타임존이 적용되어 있지 않아 mysql에 한국시간대를 입력하면 원하는 시간보다 -09:00으로 나올것이다.
실제로
select now();
이라고 치면 현재 컴퓨터 시간보다 -09:00된 시간이 나온다.(GCP에 경우)
SET GLOBAL time_zone='+09:00';
SET time_zone='+09:00';
위 명령어를 친뒤 다시 타임존을 확인해보면
이렇게 잘 바뀌어 있다.
또한
select now();
를 쳤을 때 현재 시간으로 잘 나온다.
참고 다른글에서는
+09:00
대신Asia/Seoul
으로 치라고 하는데 저렇게 치면 계속 에러가 나서+09:00
으로 쳤었다. 혹시 에러가 나는사람은 글자가 아닌 숫자로 치길 바랍니다.
mysql을 재시작해야 하는경우 위 설정이 초기화된다.
재식작해도 설정이 남아있으려면 설정파일에서 바꿔야 한다.
아래 명령어로 설정파일을 열자
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
파일 맨밑에
default-time-zone="+09:00"
을 추가한다.
그리고 mysql을 재시작 한다. 재시작 하는 명령어는 2가지중 하나를 사용하면 된다.
1. service mysql restart
2. systemctl restart mysql.service
let timeSource = "2020-10-05T09:00:00.000Z"
let dateObj = new Date(timeSource);
console.log(dateObj);
결과 2020-10-05T09:00:00.000Z
let timeString = dateObj.toLocaleString("en-US", {timeZone: "Asia/Seoul"});
let timeString_KR = dateObj.toLocaleString("ko-KR", {timeZone: "Asia/Seoul"});
console.log(timeString);
console.log(timeString_KR);
결과
10/5/2020, 6:00:00 PM
2020. 10. 5. 오후 6:00:00
en-US와 ko-KR은 시간을 바꾸진 않고 년월일 같은 형식과 언어를 바꿔준다.
뒤의 타임존이 부분이 반영되어 utc를 타임존에 맞는 시간대로 바꿔준다.
출처
1. https://stackoverflow.com/questions/10087819/convert-date-to-another-timezone-in-javascript
2. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString#:~:text=The%20toLocaleString()%20method%20returns,the%20behavior%20of%20the%20function.
cp /usr/share/zoneinfo/Asia/Seoul /etc/localtime
위 명령어를 쓰면 우분투 자체의 타임존 자체가 바뀐다는데 잘 되진 않았다.
출처: mysql 시간대(timezone) 변경하는 방법
다시 서버시간을 UTC로 되돌리는 명령어
ln -fs /usr/share/zoneinfo/UTC /etc/localtime
혹은 sudo timedatectl set-timezone UTC
출처
https://tlo-developer.tistory.com/78
https://stackoverflow.com/questions/930900/how-do-i-set-the-time-zone-of-mysql
쩔었어요!