문제

루비 라이브러리에 대한 코드를 리팩토링하고 있습니다. 이 코드에는 날짜 구문 분석기가 포함되어 있습니다. 테스트 중 하나는이 문자열을 구문 분석하는 것이 었습니다. "2008-02-20T8 : 05 : 00-010 : 00" ISO 8601.

이전 코드는 실제로 "2 월 20 일 18:05:00 UTC 2008"을 출력합니다. 나의 새로운 코드는 다음과 같이 출력한다 : "2 월 20 일 16:05:00 UTC 2008".

내 질문은 : 어느 것이 올바른가?

Time.parse 루비에서 두 번째를 준다. 그러나 다시, 나는 이전 코드와 테스트가 버그가되었음을 100% 확신하고 싶습니다.

어느 것이 맞습니까? (어쩌면 다른 언어로 라이브러리로 문자열을 구문 분석 할 수 있습니까? - 루비 만 알고 있습니다.)

도움이 되었습니까?

해결책

올바른 UTC 시간은 1805입니다. 시간 그룹은 영역 -10에서 0805를 나타 내므로 UTC를 주어진 시간에 추가하십시오. 1805 년 이후 1805 년이 2400보다 작습니다. 같은 날입니다.

코드가 1605를 제공하는 경우, 당신은 거의 확실히 시간대가 Zone -8로 잘못 설정되어 있으며, 이는 태평양 표준 시간입니다.


아하, 입력 형식이 엉망인 것 같습니다. 관찰하다:

irb(main):003:0> Time.parse("2008-02-20T8:05:00-010:00") 
=> Wed Feb 20 08:05:00 -0700 2008

나는 구역 -7에 있었기 때문에 내 로케일에 적합합니다. 하지만

irb(main):004:0> t=Time.parse("2008-02-20T8:05:00-010:00")
=> Wed Feb 20 08:05:00 -0700 2008
irb(main):005:0> t
=> Wed Feb 20 08:05:00 -0700 2008
irb(main):006:0> t.getutc
=> Wed Feb 20 15:05:00 UTC 2008

예상치 못한 결과를 얻고 있습니다. 이제 관찰하십시오 :

irb(main):007:0> t=Time.parse("2008-02-20T8:05:00-10:00")
=> Wed Feb 20 11:05:00 -0700 2008
irb(main):008:0> t.getutc
=> Wed Feb 20 18:05:00 UTC 2008

거기 있습니다 예상되는 결과. 차이를 보시겠습니까? 첫 번째 예제 vs Second :

irb(main):004:0> t=Time.parse("2008-02-20T8:05:00-010:00")
irb(main):007:0> t=Time.parse("2008-02-20T8:05:00-10:00")

나는 가짜 추가 0을 꺼냈다 (이것은 확실히 눈치 채지 못했습니다.) 그리고 Whoosh, 그것은 효과가 있습니다.

다른 팁

나는 이것이 꽤 늙었다는 것을 알고 있지만, 나는 단지 그것을 가로 질러 달렸다.

어딘가에 무언가가 해석되고 있다고 확신 할 것입니다 010 로서 10 월 값이 8 인 번호 8. 아마도 그것은 구현의 버그 일 것입니다. Time.parse()?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top