Mysql에서 일반적으로 사용되는 Timestamp는 yyyy-mm-dd hh:mm:ss 로 저장되며,
SELECT UNIX_TIMESTAMP(); 를 사용해서 확인하면
이와같은 Ticks가 출력이 된다.
C#의 경우도 DateTime.Now는 yyyy-mm-dd hh:mm:ss로 출력이 된다.
하지만 Ticks를 출력해보면
Mysql에서 사용되는 Ticks과 차이가 있다.
Mysql과 C#에서 사용하는 Ticks의 기준이 서로 다르기 때문에 발생하는 문제이다.
https://dev.mysql.com/doc/refman/8.0/en/datetime.html
해당 문서에서 볼 수 있듯 Mysql의 Datetime에서 사용하는 Ticks는 1970-01-01 00:00:00부터 시작된다. 또한, 소수점을 지정하지 않으면 Ticks에는 초 단위로 저장이 된다.
https://docs.microsoft.com/ko-kr/dotnet/api/system.datetime.ticks?view=net-5.0
C#에서는 0001-01-01 00:00:00부터 시작된다. 기본적으로 100나노초 단위로 저장된다.
// C# DateTime to Mysql Datetime
// 1623283200, 2021-06-10 00:00:00
var time = new DateTime(2021, 6, 10, 0, 0, 0);
var unix = new DateTime(1970, 1, 1);
var ticks = (time.Ticks - unix.Ticks) / TimeSpan.TicksPerSecond;
C#에서 원하는 시간의 DateTime 객체를 생성하고 1970-01-01 00:00:00에 해당하는 틱을 빼주고 Second에 해당하는 틱을 나눠서 Mysql에서 사용되는 Datetime과 동일한 Ticks를 가지도록 변환했다.
반대로 Mysql Datetime Ticks에서 C# DateTime Ticks로 변환하기 위해서
위에서 했던 것과 반대로 계산한다.
// Mysql Ticks to C# DateTime Ticks
var mysqlTick = 1623283200;
var unix = new DateTime(1970, 1, 1);
var csTick = (mysqlTick * TimeSpan.TicksPerSecond) + unix.Ticks;
Mysql Datetime의 Ticks에 TicksPerSecond를 곱해주고 거기에 1970-01-01 00:00:00에 해당하는 Ticks를 더해주면 C# DateTime.Ticks에 해당하는 값을 구할 수 있게 된다.
'기타' 카테고리의 다른 글
윈도우(Windows)에서 배시 쉘(Bash shell) 사용해보기 (0) | 2020.06.23 |
---|
댓글