development

Ruby에서 DateTime의 시간 부분 설정

big-blog 2020. 8. 29. 12:24
반응형

Ruby에서 DateTime의 시간 부분 설정


예를 들어 datetime 객체가 있다고 가정합니다 DateTime.now. 시간과 분을 0 (자정)으로 설정하고 싶습니다. 어떻게 할 수 있습니까?


Rails 환경에서 :

ActiveSupport 덕분에 다음을 사용할 수 있습니다.

DateTime.now.midnight
DateTime.now.beginning_of_day

또는

DateTime.now.change({ hour: 0, min: 0, sec: 0 })

# More concisely
DateTime.now.change({ hour: 0 })                

순전히 Ruby 환경에서 :

now = DateTime.now
DateTime.new(now.year, now.month, now.day, 0, 0, 0, now.zone)

또는

now = DateTime.now
DateTime.parse(now.strftime("%Y-%m-%dT00:00:00%z"))

신경 쓰지 마. 새 DateTime을 만들어야합니다.

DateTime.new(now.year, now.month, now.day, 0, 0, 0, 0)

경고 : DateTime.now.midnightDateTime.now.beginning_of_day(현재 날짜의 제로 시간 - 당신은 그 이름에서 기대하는 것처럼 자정 24:00:00 반환하지 않습니다) 같은 값을 반환합니다.

그래서 나는 미래의 자정 x 일을 계산하기 위해 받아 들여지는 대답을 사용할 수있는 사람을 위해 이것을 추가 정보로 추가하고 있습니다.

예를 들어 14 일 자정에 만료되는 14 일 무료 평가판은 다음과 같습니다.

DateTime.now.midnight + 14.days

13.x 일 평가판에 해당하는 14 일의 아침입니다 (x는 남은 하루 중 일부입니다. 지금 정오이면 13.5 일 평가판입니다).

실제로 다음을 수행해야합니다.

DateTime.now.midnight + 15.days

14 일 자정에 도착합니다.

이런 이유로 저는 beginning_of_day00:00:00이므로 항상 사용하는 것을 선호합니다 . 자정을 사용하면 오해의 소지가 있거나 오해를받을 수 있습니다.


자주 사용하는 경우이 gem을 설치하여 날짜 구문 분석을 개선하는 것이 좋습니다.

https://github.com/mojombo/chronic

require 'chronic'

Chronic.parse('this 0:00')

참고 URL : https://stackoverflow.com/questions/6327396/set-time-part-of-datetime-in-ruby

반응형