your programing

Ruby에서 UTC 타임 스탬프를 ISO 8601로 변환

lovepro 2020. 10. 4. 12:55
반응형

Ruby에서 UTC 타임 스탬프를 ISO 8601로 변환


UTC로 된 타임 스탬프가 있습니다.

'2010-10-25 23:48:46 UTC'

ISO 8601로 변환해야합니다.

'2010-10-29 06 : 09Z'

문서는 지옥처럼 혼란 스럽습니다.이를 수행하는 가장 쉬운 방법은 무엇입니까?


우리를 속이려는 것 같아요.

질문에 대한 입력 날짜는 2010 년 10 월 25 일이고 출력은 2010 년 10 월 29 일 입니다 . 잘했습니다!

이 nit-picking 스레드에서 계속 : 시간도 완전히 다르며 출력 시간에서 초를 놓치고 있습니다.

이제 진정한 답입니다.

먼저 약간의 사실을 알 수 있습니다. Ruby의 ISO 8601 출력은 ISO 8601의 Wikipedia 페이지 의 "Combined date and time"출력과 유사 합니다 .

문자열이 있으므로 Time.NET으로 할 수 있는 객체 로 변환해야합니다 to_time. 그런 다음 iso8601ISO 8601 버전을 가져 오기 위해 해당 객체를 호출하기 만하면됩니다 .

"2010-10-25 23:48:46 UTC".to_time.iso8601

to_time방법은 Rails에서 제공하는 반면 iso8601Ruby의 표준 라이브러리에서는 제공합니다.


많은 실험 끝에 Time 라이브러리의 파서가 DateTime보다 낫다는 것을 알았습니다. 그 경고와 함께, 저는 이런 종류의 일에 항상 DateTime보다는 Time을 사용하며, 루비 문서는 이것이 왜 그렇게되는지 알아보기 어렵습니다.

require 'time'
puts Time.parse("2010-10-25 23:48:46 UTC").iso8601
"2010-10-25T23:48:46Z"

참고 : to_time 메소드를 적용하기 전에 시간 문자열을 시간 객체로 변환 (분석)해야합니다.

ruby-1.9.2-p180 :016 > "2010-10-25 23:48:46 UTC".to_time.iso8601
NoMethodError: undefined method `to_time' for "2010-10-25 23:48:46 UTC":String
    from (irb):16

올바른 절차 :

irb> ut = DateTime.parse("2010-10-25 23:48:46 UTC")

irb> ut.iso8601
 => "2010-10-25T23:48:46+00:00" 

참고 URL : https://stackoverflow.com/questions/4057015/converting-utc-timestamp-to-iso-8601-in-ruby

반응형