이 데이터베이스에 열이 올바른 시간대
1) 레일에 저장되지 않을 때 자동으로 좋은 인 (데이터베이스에서 그들을 삽입하기 전에 UTC 시간에 시간을 변환 것으로 보인다 일)은 시간에 "+0000"의 오프셋이 있음을 의미합니다. 즉, 데이터베이스에 오후 8시를 저장하고 서버가 "+0600"오프셋을 갖는 시간대에 있으면 해당 UTC 시간은 오후 2시이므로 오후 2 시가 데이터베이스에 저장됩니다. 즉, 로컬 서버의 시간이 UTC 시간보다 6 시간 빠릅니다. 즉, 서버의 시간대가 오후 8 시가되면 UTC 시간대가 오후 2시입니다.
2) 날짜를 비교할 때 루비는 시간대 오프셋을 고려합니다. 즉, 루비는 모든 시간을 동일한 시간대로 변환 한 다음 시간을 비교합니다. 다음은 예제입니다.
2.0.0p247 :086 > x = DateTime.strptime('28-01-2013 08:00:00 PM +6', '%d-%m-%Y %I:%M:%S %p %z')
=> Mon, 28 Jan 2013 20:00:00 +0600
2.0.0p247 :087 > y = DateTime.strptime('28-01-2013 08:20:00 PM +7', '%d-%m-%Y %I:%M:%S %p %z')
=> Mon, 28 Jan 2013 20:20:00 +0700
2.0.0p247 :088 > x < y
=> false
두 Datetime 개체의 시간을 비교하면 x는 y보다 작습니다. 그러나 y는 오전 7시 20 분에 +6 오프셋이있는 시간대에서와 같은 +7 오프셋이있는 시간대에서 오후 8:20의 시간을가집니다. 따라서 y는 실제로 x보다 작습니다. 사과와 사과를 비교해야합니다. 즉, 동일한 시간대로 변환 된 시간을 정신적으로 비교해야 루비/레일과 동일한 결과를 얻을 수 있습니다. 당신은 레일 UTC를 (사용하여 UTC 시간에 Time.now을 변환 할 수 있습니다
3)) 방법 : 루비 시간을 비교하기 전에 무엇이다
2.0.0p247 :089 > x = Time.now
=> 2013-09-07 8:00:00 +0600
2.0.0p247 :090 > x.utc
=> 2013-09-07 02:00:00 UTC
.지금은 좀 더 편리하게 사용 원하는 시간과 날짜 시간 객체 생성 찾을 수 있습니다task.when + task.duration
4)에 : 당신은이 0으로 오프셋 지정할 수 있기 때문에
DateTime.strptime('28-01-2013 08:00:00 PM +0', '%d-%m-%Y %I:%M:%S %p %z'
것은, 당신이 '돈을 UTC 시간으로의 변환을 예상하는 시간을 만들어야합니다.
아니면이() 시간 변환없이 변경 오프셋의 원인이되는 변화() 메소드를 사용할 수 있습니다은`duration` 당신이 "1 분"저장 않았다 어떻게
2.0.0p247 :011 > x = DateTime.now
=> Sun, 08 Sep 2013 00:34:08 +0600
2.0.0p247 :012 > x.change offset: "+0000"
=> Sun, 08 Sep 2013 00:34:08 +0000
를? –
필자는이 필드와 관련된 마이 그 레이션을 보여 주므로 정수로 저장됩니다. –
'DateTime'에'60 '을 추가하면 어떻게됩니까? 콘솔에서'DateTime.now + 60'을 실행하고 타임 스탬프에'+60 '이 무엇인지보십시오. –