문자열을 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.