我正在尝试将字符串日期转换为可以存储在数据库中的日期。这些是我的尝试:
params[:event][:start_date] = '03-21-2016'
DateTime.strptime(params[:event][:start_date], '%Y-%m-%dT%H:%M:%S%z')
或
DateTime.strptime(params[:event][:start_date], '%m-%d-%Y')
但是我一直收到无效的日期错误。我不确定我做错了什么。
答案 0 :(得分:2)
这样做的一种方法是:
<name>m²</name>
答案 1 :(得分:0)
您需要了解格式字符串(%Y
)中每个片段(例如'%Y-%m-%dT%H:%M:%S%z'
)的含义:阅读此内容。
http://apidock.com/rails/ActiveSupport/TimeWithZone/strftime
一旦你知道这一点,就可以将格式字符串定制到你拥有或期望得到的日期字符串:在这种情况下,"%m-%d-%Y"
。
答案 2 :(得分:0)
当调试时创建一个新的,基本的和简单的代码版本并测试它。
require 'date'
params = '03-21-2016'
DateTime.strptime(params, '%m-%d-%Y') # => #<DateTime: 2016-03-21T00:00:00+00:00 ((2457469j,0s,0n),+0s,2299161j)>
请注意格式的顺序:'%m-%d-%Y', which works. That's the problem with your first attempt, where you tried to use
%Y-%m-%d . There is NO month
21 or day
2016`。
您的第二次尝试是有效的,但您的问题会使其显示无效。您需要更加小心测试:
params = {event:{start_date:'03-21-2016'}}
DateTime.strptime(params[:event][:start_date], '%m-%d-%Y') # => #<DateTime: 2016-03-21T00:00:00+00:00 ((2457469j,0s,0n),+0s,2299161j)>