2012-10-05 2 views
10

레일즈에서는 DateTime.now.utc와 Time.current를 언제 사용할지에 대한 안내에 다소 혼란 스럽습니다. 특히 서로 다른 버전에서 가장 좋은 프레임 워크 내에서 다양한 의견이있는 것으로 보입니다. DateTime.now.utc 제로의 오프셋 UTC와 타임 스탬프를 생성처럼 Time.current.utc은 UTC시간대와 타임 스탬프를 생성하는 동안레일즈에서`DateTime.now.utc`와`Time.current.utc`를 사용해야하는시기는 언제입니까?

그것은 보인다. 이는 미묘한 차이 인 것처럼 보이지만 대부분의 경우 매우 중요합니다 (예 : DST 계산).

언제 DateTime.now.utc을 사용해야하며 언제 Time.current.utc을 사용해야합니까? Time.current.utc 대신 DateTime.now.utc을 사용해야하는 이유가 있습니까?

+0

어디에서 차이를 만들 수 있습니까? UTC는 일광 절약 시간 전환이 없다는 것을 감안할 때, 다른 시간대를 사용하기 시작할 때만 차이가 있습니다. (루비에 대해서는 모르지만 날짜/시간은 꽤 많이 걸렸습니다. 그래서 더 많은 배경을 가지고 내가 도울 수있을 것입니다.) –

+0

@JonSkeet : 그것이 변화를 가져올 지 모르겠습니다. (그래서 내가 어느 것을 사용해야하는지 묻습니다.)'DateTime.now.utc'는 먼저'DateTime.now'를 호출 한 다음 UTC 오프셋을 역전하여 "UTC"시간을 얻습니다. 그래서 그것은 _time zones_ 사이의 번역이 아니라 _offsets_ 사이의 번역임을 주목하십시오. 예를 들어 상하이의 악명 높은 1927-1928 사례와 같이 가장자리의 경우 문제가 될 수 있습니까? –

+0

@JonSkeet : 실제로 UTC가 아니라면,'DateTime.now'와'Time.current' 둘 다 UTC가 아닌 다른 시간으로 현지 시간을 만들어냅니다. 다른 말로하면, UTC로 변환하는 방법에 대한 접근 방식이 서로 다른 것처럼 보입니다. 하나는 오프셋을 직접 적용하여 수행합니다. 다른 하나는 실제로 UTC의 새 표준 시간대에서 표준 시간대 계산을 다시 실행하여 수행합니다. –

답변

30

.now 대신 .current을 사용해야합니다. .current 사용 무엇 레일 환경에 설정되어있는 동안

.current의 차이 .now.now 서버의 시간대를 사용합니다. 설정되지 않은 경우 .current.now과 같습니다. Time.zone 또는 config.time_zone가 설정

Time.current

반환 Time.zone.now, 그렇지 않으면 단지 Time.now을 반환합니다.

Datetime.current

반환 Time.zone.now.to_datetime Time.zone 또는 config.time_zone 가 설정, 그렇지 않으면 시간을 반환합니다. now.to_datetime.

+0

Date.current와 Date.today는 이것들과 같은가요? – ajahongir

+0

'Time.now.in_time_zone'과'Time.current'의 차이점은 무엇입니까? –

+0

@pinouchon 그들은 둘 다 동일합니다. 둘 다'ActiveSupport :: TimeWithZone' 인스턴스를 반환합니다. – xdazz

관련 문제