将字符串转换为Ruby on Rails上的日期

时间:2016-01-12 14:22:38

标签: ruby-on-rails ruby ruby-on-rails-4

我正在尝试将字符串日期转换为可以存储在数据库中的日期。这些是我的尝试:

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')

但是我一直收到无效的日期错误。我不确定我做错了什么。

3 个答案:

答案 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)>