说我有一个datetime对象,例如DateTime.now
。我想将小时和分钟设置为0(午夜)。我怎样才能做到这一点?
说我有一个datetime对象,例如DateTime.now
。我想将小时和分钟设置为0(午夜)。我怎样才能做到这一点?
Answers:
感谢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 })
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.new(now.year, now.month, now.day, 0,0,0, now.zone) != now.to_date.to_datetime
没关系,明白了。需要创建一个新的DateTime:
DateTime.new(now.year, now.month, now.day, 0, 0, 0, 0)
DateTime.new(Time.now.year, Time.now.month, Time.now.day, 0, 0, 0)
它可以工作。
now = DateTime.now
DateTime
。如果您居住在像英国这样的具有夏令时的国家,则会遇到麻烦的问题。在这里查看说明。gist.github.com/pixeltrix/e2298822dd89d854444b
警告:DateTime.now.midnight
并DateTime.now.beginning_of_day
返回相同的值(这是当前日期的零小时-午夜不返回24:00:00,正如您期望的那样)。
因此,我将其添加为任何可能使用接受的答案来计算未来x夜的任何人的进一步信息。
例如,有14天的免费试用期,应在第14天的午夜到期:
DateTime.now.midnight + 14.days
是第14天的早晨,相当于13.x天的试用期(x是剩余的一天的一部分-如果现在是中午,则为13.5天的试用期)。
您实际上需要这样做:
DateTime.now.midnight + 15.days
在第14天午夜。
因此,我始终喜欢使用beginning_of_day
,因为那是00:00:00。使用午夜可能会误导/误解。
如果您经常使用它,请考虑安装此gem来改善日期解析:
https://github.com/mojombo/chronic
require 'chronic'
Chronic.parse('this 0:00')