2012-08-01 1 views
1

여기에 포스트 그레스에서 쿼리 결과입니다Ruby sequel과 Postgres psql의 시간대 정보가 다른 이유는 무엇입니까?

$ psql ... -c 'select the_date from foo where foo_id in (998,999)' 
    the_date  
------------------------ 
2012-03-07 09:34:47.98 
2012-03-16 11:31:25.336 

the_date는 "시간대가없는 타임 스탬프"입니다.

#!/usr/bin/env ruby 

require 'sequel' 

@DB = Sequel.connect({...}) 
query = "select the_date from foo where foo_id in (998,999)" 
@DB[query].each do |row| 
    warn row 
end 

일부 출력 :

{:the_date=>2012-03-07 09:34:47 -0600} 
{:the_date=>2012-03-16 11:31:25 -0500} 

-0500 및 -0600에서 온 않습니다 여기

는 루비 프로그램입니다? 이것이 서버와 클라이언트 머신 (미국/중동)의 "Olson timezone"이지만, Ruby가 그것을 추가하고 psql이 그것을 왜 추가하지 않습니까?

나는 the docs을 읽었으며 완전히 혼란 스럽다.

서버는 Postgres 9.0.4이고 클라이언트는 psql 9.1.4이고 속편은 3.33.0입니다.

+0

이 [밀접한 관련 질문] (http://stackoverflow.com/q/9571392/939860)의 정보는 유용 할 수 있습니다. –

답변

2

열의 유형은 '시간대없이 시간대'입니다. 따라서 Postgres가이 열에 값을 표시하면 시간대없이 시간 소인이 표시됩니다. 그러나 Sequel은 Postgres 타임 스탬프를 Ruby Time 클래스의 인스턴스로 변환하려고하며 Time 클래스의 인스턴스에는 지정된 시간대가 있어야합니다. 즉, 현지 시간대의 시간이거나 UTC의 시간입니다. 따라서 후편은 하나를 선택해야합니다. 기본적으로 현지 시간대를 선택합니다.

데이터베이스 및 응용 프로그램 표준 시간대를 Sequel에서 구성 할 수 있습니다.

> c['select * from actors'].each do |row|; puts row[:created_at]; end 
Thu Jul 12 20:33:17 -0400 2012 
다음

타임 스탬프가 내 로컬 시간대 (EDT)에 있다고 가정합니다 : 예를 들어 http://sequel.rubyforge.org/rdoc/classes/Sequel/Timezones.html

참조, 여기에 내가 편리했다 데이터베이스와 기본 속편 동작입니다. 내가 할 경우

그러나이 : ​​

> Sequel.database_timezone = :utc 
=> :utc 
> c['select * from actors'].each do |row|; puts row[:created_at]; end 
Thu Jul 12 20:33:17 UTC 2012 

그런 다음 타임 스탬프는 UTC에 있다고 가정합니다.

+0

좋은 답변, 고마워. 따라서 Sequel의 "로컬 타임 스탬프"동작은 타임 스탬프 자체 (따라서 -0500 및 -0600)를 기반으로 일광 절약 시간을 고려할만큼 정교합니다. – dfrankow

+1

예 - 그 정교함은 실제로 Ruby의 Time 클래스에서 나옵니다. 예를 들어 동부 지역의 나를 위해 Time.parse ('2012-03-07 09:34:47'). to_s는 'Wed Mar 07 09:34:47 -0500 2012'를 제공하고 Time.parse (' 2012-03-16 11:31:25 '). to_s는 "Fri Mar 16 11:31:25 -0400 2012"입니다. –

0

나는 루비와 날짜/시간/타임 스탬프와 이상한 거래를 해왔다. 프로그램이 결과를 알려진 데이터 유형으로 변환하고 자동으로 캐스팅하려고 시도하는 것 같습니다. 그래서 5digit 시간대 코드가 맨 끝에 표시됩니다.

관련 문제