[RUBY-ON-RAILS] 레일 : 어떻게 특정 시간대에 날짜 - 시간 문자열을 구문 분석
RUBY-ON-RAILS레일 : 어떻게 특정 시간대에 날짜 - 시간 문자열을 구문 분석
나는 레일 3.2을 사용하고 데비안에 1.9.3 루비 있어요. 나는 HTML 양식을 사용하여 문자열의 형태로 날짜, 시간 및 시간대를 수집하는 응용 프로그램을 가지고있다. 이 같은:
start_date: "04-15-2010",
start_time: "10:00:00",
timezone: "Central Time (US & Canada)"
내가 뭘하려는는 UTC 시간대의 일단이 경우, 시작 시간 7 시간 추가 할 UTC, 같은 내 데이터베이스에 저장되는 단일 날짜에 이러한 3 개 요소를 분석이다. 이 UTC 대신 수신 중부 시간으로 DB에 일단 저장된 시간은 17:00이 될 것입니다 그래서.
나는 날짜를 구문 분석 같은 것을 시도했다 :
ActiveSupport::TimeZone[timezone].at DateTime.strptime("{ 2012-04-09 20:00:00 }", "{ %Y-%m-%d %H:%M:%S }").to_i
그러나, 나는 %의 Z와 결과 시간에 시간대를 통합 할 수 아니에요. 이 중 하나를 구문 분석하지 않거나 시간이 UTC 중앙하지 시간으로 해석됩니다. 내 질문은 그래서, 어떻게 저장된 실제 날짜 / 시간의 값을 변경하지 않고 특정 시간대에 날짜 문자열을 강요합니다. 나는 미래의 시간대 변환이 정확한지 그래서 그 때 그것으로 올바른 시간대를 포함하는 날짜 / 시간 객체로 문자열을 구문 분석 할 수 있도록하고 싶습니다. 나는 모든 이상을 검토 한 결과이 작업을 수행 할 수있는 방법을 찾을 수 없습니다. 그것은이 뭔가 공통의 일처럼 보이기 때문에, 이상하다 HTML 양식에서 입력 된 날짜로한다. 어떤 도움 주셔서 감사합니다.
해결법
-
==============================
1.%의 Z는 시간대 이름을 지정하는 올바른 방법입니다. 다음을 시도 해 봤나?
%의 Z는 시간대 이름을 지정하는 올바른 방법입니다. 다음을 시도 해 봤나?
date_and_time = '%m-%d-%Y %H:%M:%S %Z' DateTime.strptime("04-15-2010 10:00:00 Central Time (US & Canada)",date_and_time)
-
==============================
2.이 시도:
이 시도:
zone = "Central Time (US & Canada)" ActiveSupport::TimeZone[zone].parse("2013-04-03 17:47:00")
-
==============================
3.나는 개인적으로 문자열 #의 in_time_zone를 사용하여 선호합니다 :
나는 개인적으로 문자열 #의 in_time_zone를 사용하여 선호합니다 :
>> '22.09.1986 10:30'.in_time_zone('Central Time (US & Canada)') # => Mon, 22 Sep 1986 10:30:00 CDT -05:00
이 제공된 시간대에 문자열에서 날짜와 시간을 구문 분석합니다.
-
==============================
4.이것은 내가 생각 해낸하는 방법이다. 아니 예쁜,하지만 그것을 작동합니다. 지정된 형식을 사용하여 문자열을 구문 분석하고 내가 Time.zone.parse이 필요 알고있는 포맷으로 전환 할 수 있습니다.
이것은 내가 생각 해낸하는 방법이다. 아니 예쁜,하지만 그것을 작동합니다. 지정된 형식을 사용하여 문자열을 구문 분석하고 내가 Time.zone.parse이 필요 알고있는 포맷으로 전환 할 수 있습니다.
class ActiveSupport::TimeZone def strptime(time, format='%m/%d/%Y') formatted = Time.strptime(time, format).strftime('%Y-%m-%d %T') parse(formatted) end end
그럼 당신은하지만, 지정된 형식, 다른 질문에서 언급 한 것처럼 뭔가를 할 수 있습니다 :
zone = "Central Time (US & Canada)" ActiveSupport::TimeZone[zone].strptime('2013-04-03', '%Y-%m-%d')
또는 당신은 이미 시간대 설정이있는 경우 :
Time.zone = "Central Time (US & Canada)" Time.zone.strptime('01/13/2006')
나는 %의 m의 기본 형식을 사용 / % D / % Y 그게 내 사용자 입력이 대부분의 시간을 무엇 때문에. 당신은 당신의 요구에이를 사용자 정의하거나 믿습니다 기본 형식의 날짜 시간 사용을 사용할 수 있습니다 ISO8601 (% FT %의 T %의 z를)
-
==============================
5.드디어 더러운, 아직이 작업을 수행하는 확실한 방법을 발견했습니다.
드디어 더러운, 아직이 작업을 수행하는 확실한 방법을 발견했습니다.
먼저, 다음과 같이 일반 루비 Time.strptime를 사용하여 문자열을 구문 분석 :
time = Time.strptime('12 : 00 : PM', '%I : %M : %p')
당신이 얻을이 방법은 올바른 시간대에 아직 시간 구문 분석,하지만. 이 문제를 해결하려면,하자가 문자열 형식으로 시간을 변환 표준 ActiveSupport로 구문 분석 :: 시간대 # 구문 분석
Time.zone.parse(time.to_s)
결과는 올바른 시간대로 파싱 우리의 시간과 ActiveSupport :: TimeWithZone입니다.
우리가 이런 식으로해야 할 이유는 ActiveSupport :: 시간대도 ActiveSupport :: TimeWithZone도가 strptime 방법을 지원한다는 것입니다. 우리가 시간대 정보가없는 핵심 루비 strptime와 시간을 구문 분석 할 필요가 그래서, ActiveSupport이 객체에 허용 형식으로 변환 한 후 또 다시 구문 분석합니다.
-
==============================
6.날짜 시간이 도약 날이, 쉬운, 나던 휴식을 사용하여 날짜 문자열을 가지고 날짜 문자열의 값을 변경하지 않고 UTC 이외의 시간대를 첨부해야합니다 :)
날짜 시간이 도약 날이, 쉬운, 나던 휴식을 사용하여 날짜 문자열을 가지고 날짜 문자열의 값을 변경하지 않고 UTC 이외의 시간대를 첨부해야합니다 :)
xx = DateTime.strptime("9/1/15 #{object.time_zone}", "%m/%d/%Y %Z")
-
==============================
7.UTC에서 특정 날짜 형식을 변환합니다.
UTC에서 특정 날짜 형식을 변환합니다.
ActiveSupport::TimeZone['UTC'].parse(Time.strptime('01/24/2019T16:10:16', "%m/%d/%YT%H:%M:%S").asctime)
from https://stackoverflow.com/questions/10091959/rails-how-to-parse-date-time-string-into-a-specific-time-zone by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 유효성 검사 고유성만을 조건의 경우 레일 (0) | 2020.03.03 |
---|---|
[RUBY-ON-RAILS] OS-X는 레일 : "빌드 보석 네이티브 확장에 실패" (0) | 2020.03.03 |
[RUBY-ON-RAILS] 어떻게 루비와 PDF 기존에 편집 또는 쓰기에? (0) | 2020.03.03 |
[RUBY-ON-RAILS] GIT에서 레일 dB / schema.rb 파일을 처리 할 수있는 권리 방법은 무엇입니까? (0) | 2020.03.03 |
[RUBY-ON-RAILS] 어디 유증 구현 "authenticate_user가!" 방법? (0) | 2020.03.03 |