2009-11-03 2 views
4

Ruby에서 로컬 시스템 시간대 이름을 찾아야합니다 (TZInfo :: Timezone.all_identifiers 값 목록에서). Oracle 데이터베이스 세션 시간대를 올바르게 설정하여 데이터베이스의 표준 시간대 값을 올바르게 처리 할 수 ​​있도록합니다.자바와 같은 방법으로 Ruby에서 현지 시간대 이름을 가져 오는 방법은 무엇입니까?

자바에서 java.util.TimeZone.getDefault(). getID() (내 컴퓨터에서 "Europe/Riga"를 반환)와 같은 값을 얻고 싶습니다. JDK 소스를 살펴 본다면이 기본 시간대를 찾는 플랫폼 별 C 함수가 있습니다.

그래서 JRuby를 사용할 때이 Java 메소드를 호출 할 수 있습니다. 하지만 MRI에서 사용할 수있는 솔루션이 필요합니다.

Time.now.zone을 사용하려고했지만 현재 일광 절약 시간인지 여부에 따라 다른 결과 (내 경우 "EET"또는 "EEST")가 반환됩니다. 따라서 일광 절약 시간제로 전환 할 때 정확히 날짜를 지정하는 앞서 언급 한 위치 형식 (예 : "유럽/리가")에 들어가야합니다.

제안 사항?

답변

2

JRuby는 C-Ruby가 동일한 기능을 수행하므로 호환성 때문에 EET/CDT와 비슷한 값을 반환합니다. 더 루비와 같은 구문,

require 'java' 
id = java.util.TimeZone.getDefault().getID() 

또는 : JRuby를 쉽게 자바 층을 호출 할 수 있기 때문에 그러나, 당신은 단지 문신처럼 부를 수

require 'java' 
id = java.util.TimeZone.get_default.get_id 

을 다른 방법으로는 JodaTime을 사용할 수

require 'java' 
id = org.joda.time.DateTimeZone.getDefault.getID 
+2

예, JRuby에서 쉽습니다. 하지만 MRI (원래 C 기반 Ruby 인터프리터)에서 동일한 결과를 얻고 싶습니다. –

+0

MRI가 어떤 트릭이나 네이티브 호출 없이는 그렇게 할 수있는 방법이 없다고 생각합니다. 리눅스에서는 쉽다. 단지 "cat/etc/timezone"이다. – vsizikov

관련 문제