2014-12-24 2 views
2

나는 사용자 입력에서 들어오는 여러 날짜, 예가 :루비 문자열

MM-DD-YYYY 

6-3-1975 

MM/DD/YYYY 

4/23/1967 

require 'time'

에 내장 된 루비를 사용하고 Time.parse("4/23/1967")

에 노력을 나에게 오류를 제공 time.rb : argument out of range.

대시 또는 슬래시를 사용하여 다른 사용자 입력을 변환 할 수있는 솔루션은 무엇입니까?

+0

입니까? – jkeuhlen

+0

사용자는 표시된 입력을 입력 할 수 있습니다 ... 문제는 하나의 형식으로 들어오는 다른 형식을 변환하려고합니다 ... MM/DD/YYYY – AntonB

+0

그래서 모든 사용자 입력이 강제로 끝나기를 원합니다. 양식 MM/DD/YYYY? 나는 당신이'Time.parse'를 가지고 무엇을하려하는지 혼란 스러웠다. – jkeuhlen

답변

2

해결 방법 :

그래서 원하는 입력 형식은 무엇
require 'date' 

userDate = "4-23-1967" 
readDate = Date.strptime(userDate, "%m-%d-%Y") 
convertedDate = readDate.strftime("%-m/%-d/%Y") 
puts convertedDate 

OUTPUT: 4/23/1967 
1

아래에보십시오 :

Time.parse("23/4/1967") 
#=> 1967-04-23 00:00:00 +0100 
Time.parse("3-6-1975") 
#=> 1975-06-03 00:00:00 +0100 

그래서 문제가 귀하의 월과 일 순서가 반전된다는 점이다.

+0

그것은 내 문제가 아니야 ... 사용자가 MM/DD/YYYY를 입력하고 있으므로 제대로 작동하지 않는 올바른 형식으로 변환해야합니다. – AntonB

+0

다음은이 하나의 라이너를 사용해 볼 수 있습니다. Time.parse (date^('-')) –

+1

@AntonB "올바른 형식으로 변환해야합니다." 한 사용자가 미국 기반이고 "MM/DD/YYYY"를 사용하고 다른 사용자가 "DD/MM/YYYY"를 사용하는 다른 지역에있는 경우 어떻게됩니까? 임의로 MM 값을 DD로 전환 하시겠습니까? 시간의 일부가 실패하고 때로는 월과 일의 값이 뒤바뀔 때가 있습니다. 그 시점에서 매우 귀찮은 버그를 도입하게 될 것입니다. 사용자는 사용하려는 날짜 형식을 사용자에게 묻거나 월 및 일을 입력 할 때 어떤 형식 으로든 되돌릴 수있는 양식을 사용하지 않아도됩니다. –

-1

내가 원하지 않는 문자를 바꾸려면 gsub을 사용해야하는 것 같습니다. 당신은 사용자가 원하지 않는 것을 포함하는 모든 구분 기호를 넣을 수 있습니다 대괄호 내부

input = "6-3-1975" 
sanitized_input = input.gsub(/[- ]/, '/') 

.

+0

이것은 문제를 해결하지 않고 단지 연기합니다. –

+0

그게 무슨 뜻이야? – jkeuhlen

+0

@ theTinMan 당신은 정교 할 수 있습니까? – jkeuhlen