2013-08-20 3 views
2

Ruby에서 SQL TIME (00:00:00 ... 23:59:59)으로 작업 할 수있는 보석이 있습니까? 지금 당장은 내가 원한 것이 아닌 datetime 객체에 캐스트됩니다. 특정 시간대가 시간대에 포함되어 있는지 확인하고 싶습니다.루비에서 시간 데이터 형식으로 작업하기

내 최고의 솔루션 sofar는 루비 (0 ... 235959)의 정수로 캐스팅하고 이에 반대하여 작업하지만, 더 나은 솔루션이 있는지 궁금합니다.

나는 사람들이 통지를 구독 할 수 있습니다 가입 응용 프로그램을 위해 그것을 사용하려는 그들은, 가장 일반적인 경우 7시 18:30

답변

0

사이에, 예를 들어 그 원 '을 받게하고 싶은 말은 약간의 고통없이 일한다. "자정 + 2 시간 15 분"의 값은 일광 절약 시간에 비례하지 않습니다. 봄의 아침에 "02:15 AM"은 유효한 시간이 아닙니다.

자정부터 오전 4시 사이의 시간을 허용하지 않으면 문제를 피할 수 있습니다.

데이터베이스를 사용하지 않는 경우 정규 형식의 문자열로 24 시간을 저장할 수 있습니다. 표준 문자열은 평등과 불평등을 직접 비교할 수 있으며 임의의 날짜와 연결하고 Ruby의 기본 Date 메서드를 사용하여 간단한 문자열을 사용하여 간단한 산술 연산을 수행 할 수 있습니다.

또는 원하는 "시간"인터페이스를 구현하는 클래스를 만들 수 있습니다.

보석 : ice_cube와 tickle이 문제 공간을 타겟팅하는 것처럼 들리지만 사용하지 않았습니다.

-1

여기에서 주요 문제와 같은 소리는 SQL 시간 문자열 형식과 Ruby의 datetime 개체 사이의 구분입니다.

나는 당신이 필요로하는 것이 DateTime#strftimeDateTime#strptime 방법이라고 생각한다. 예를 들어 DateTime 객체 d에서 SQL 문자열로 이동하려면 d.strftime('%H:%M:%S')을 사용하고 s 문자열에서 DateTime으로 이동하려면 DateTime.strptime(s, '%H:%M:%S')을 사용합니다.

편집 : 알아요. 나는 sql이 사용하는 문자열 형식으로 계산할 수 없으므로 DateTime 또는 Time 객체로 변환하고 7:00에서 18:30 사이의 예를 들면 다음과 같이 처리합니다.

time = DateTime.strptime(<sql output string>, '%H:%M:%S') 
start_time, end_time = DateTime.strptime('07:00:00', '%H:%M:%S'), DateTime.strptime('18:30:00', '%H:%M:%S') 

(start_time..end_time).cover? time 
+0

문자열을 포맷하지 않고 시간을 기준으로 계산하는 데 관심이 있습니다. –

관련 문제