컴퓨터/C#

[C#/ PostgreSQL] C#에서 Npgsql TimestampTZ 쿼리

dolhim 2016. 6. 30. 11:57

 C# Datetime to Npgsql TimestampTZ



C# 을 이용하여 TimestampTZ 형식의 컬럼에 데이터를 넣을 때, 입력한 시간과 다르게 출력되는 경우가 있다. 


C#에서 입력한 시간보다 DB에는 9시간( UTC+9 한국 기준) 느린 시간이 출력되는데,

이는 C# 에서 UTC 설정을 해주면 해결할 수 있다.


1
2
3
4
5
6
// DateTime 예제 (SpecifyKind 메소드)
var time = new DateTime(20151027000);
Console.WriteLine(time.ToString()); // 2015-10-27 오전 12:00:00
 
var date = DateTime.SpecifyKind(time, DateTimeKind.Utc);
Console.WriteLine(date.ToString()); // 2015-10-27 오전 12:00:00

cs

위 예제는 2015년 10월 27일 0시를 입력하여 화면에 출력하는 예제이다.

같은 시간을 설정하고, 하나는 Datetime.SpecifyKind 메소드로 UTC 형식을 설정해주었다.

하지만, C# 내에서는 같은 시간을 출력한다.


다음은, 위에서 선언한 두 DataTime을 DB로 보내는 코드의 일부분이다.

1
2
3
// postgresql 명령어 파라메터 예제
sql.Parameters.Add("timestamp1", NpgsqlDbType.TimestampTZ).Value = time;
sql.Parameters.Add("timestamp2", NpgsqlDbType.TimestampTZ).Value = date;
cs


db에서 확인하면, 아래와 같이 출력된다.

1
2
3
- postgresql 출력
timestamp1 = 2015-10-26 15:00:00+00
timestamp2 = 2015-10-27 00:00:00+00
cs