문자열을 DateTime으로 변환


98

다음 String을 DateTime 개체로 구문 분석해야합니다.
30/Nov/2009:16:29:30 +0100

이 작업을 수행하는 쉬운 방법이 있습니까?

추신 : 위의 문자열을 그대로 변환하고 싶습니다. 연도 이후의 콜론은 오타가 아닙니다. 또한 RoR이 아닌 Ruby로 문제를 해결하고 싶습니다.

답변:


99

DateTime.strptime 을 사용하면 형식을 지정하고 문자열을 DateTime으로 변환 할 수 있습니다.


1
감사. 내 자신의 형식을 줄 수 있다는 것을 놓쳤습니다. 여기서 작동 하나, 「% D / % B / % Y %의 H %의 M %의 S '
— SkaveRat

1
@SkaveRat 문자열이 시간대를 존중합니까? 나는 사용%d/%b/%Y:%H:%M:%S %Z
— knut

4
사용 가능한 형식 약어 목록은 gist.github.com/halloffame/5350249
— Ryan

8
사용자가 요청한 문자열 변환의 예를 "거기서 읽어보세요"(그런데 많은 정보가있는 곳)를 지정하는 것이 예의입니다. 유래 인기는 외부 문서에 대한 링크를 제공하지만, 질문에 대한 답변을 제공하지 때문에
— 다니엘 Garmoshka에게

"정확히 일치"하는 방법이 있습니까? 현재 행동이 "처음부터 매칭", 그래서 %Y일치 둘 것 2015(예상대로)와 2016-foo-bar멈출 이후는 볼 때 2016. 이 동작은 C 대응과 일치합니다. 그러나 C 함수 는- 일치가 정확한지 여부를 결정하기 위해 일치의 끝 위치 (예 : "2016"의 경우 첫 번째 위치)를 반환합니다 . 루비에서는를 반환 DateTime하므로 나중에 아무것도 없는지 알 수 없습니다.
— Franklin Yu

97

이것도 작동하지 않습니까?

"30/Nov/2009 16:29:30 +0100".to_datetime

1
Ruby 1.9.3을 사용하는 Rails 3.2.3에서 잘 작동합니다. "2012-05-16 02:30 UTC".to_datetime => Wed, 16 May 2012 02:30:00 +0000
— Tilo

58
이것은 또한 Ruby 메서드가 아니라 Ruby on Rails 메서드입니다.
— JackCA

5
require 'active_support/all' 다음과 같아야합니다 "30/Nov/2009 16:29:30 +0100".to_datetime (실제로 모든 active_support 확장이 필요하지는 않지만 선택적으로 필요한 확장을 알아내는 데 행운을 빕니다)
— Matt Zukowski

2
ActiveSupport는 매우 깔끔하게 배치되어 있지만 최소한의 영향을 to_datetimeStringrequire 'active_support/core_ext/string/conversions'
— 주려면

3
질문은 '2009 년 11 월 30 일 16:29:30 +0100'이 아니라 '2009 년 11 월 30 일 : 16 : 29 : 30 +0100'에 관한 것입니다. 그것이 작동하지 않는 또 다른 이유입니다.
— schmijos 2014-06-11

45

나는 성공했다 :

require 'time'
t = Time.parse(some_string)

15

내가 사용하는 Time.parse("02/07/1988")다른 포스터의 일부처럼.

흥미로운 점 Time은 IRB를 열 때 기본적으로로드되었지만 Time.parse정의되지 않았습니다. 나는 require 'time'그것을 작동 시켜야만했다.

그것은 Ruby 2.2입니다.


12

이것은 date의 문자열을 datetime으로 변환합니다.

"05/05/2012".to_time

20
이것은 Ruby 메서드가 아니라 Ruby on Rails 메서드입니다.
— JackCA

1
이 질문에 대한 답은 아니었지만 많은 도움이되었습니다. 감사합니다 @ user1425976
— karlingen 2014

10

중국 Rails 개발자의 경우 :

DateTime.strptime('2012-12-09 00:01:36', '%Y-%m-%d %H:%M:%S')
=> Sun, 09 Dec 2012 00:01:36 +0000

5

Ruby 1.8에서 ParseDate 모듈은이 형식과 다른 많은 날짜 / 시간 형식을 변환합니다. 그러나 연도와 시간 사이의 콜론은 정상적으로 처리되지 않습니다. 콜론이 오타이고 실제로 공백이라고 가정하면 다음과 같습니다.

#!/usr/bin/ruby1.8

require 'parsedate'

s = "30/Nov/2009 16:29:30 +0100"
p Time.mktime(*ParseDate.parsedate(s))    # =>  Mon Nov 30 16:29:30 -0700 2009

1

주어진 시간대로 날짜 시간 문자열을 구문 분석 할 수도 있습니다.

zone = "Pacific Time (US & Canada)"
ActiveSupport::TimeZone[zone].parse("2020-05-24 18:45:00")
=> Sun, 24 May 2020 18:45:00 PDT -07:00
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.