有没有一种简单的方法从ruby中的日期字符串中获取年份?

时间:2013-08-22 18:46:00

标签: ruby-on-rails ruby date datetime

可能是一个愚蠢的问题...... 我是ruby的新手,最近我正在编写一个rake任务,将多个表合并为一个通用的表。我需要做的一件事是从数据库中获取日期,然后将日期转换为两个整数作为年份和月份,然后将它们保存到两个单独的列中。

我上周完成了这个任务文件,但不幸的是,该文件被意外删除,所以我必须再次编写代码。我不记得我是如何操纵原始文件中的日期的,我认为我在原始文件中采用的方式比当前代码更直接。目前的代码如下。

fetched_time=DateTime.strptime(pr.fetched_time,"%Y-%m-%d")
dr.year =  fetched_time.strftime('%Y').to_i
dr.month = fetched_time.strftime('%m').to_i

我尝试过很多关键词来搜索,但结果都没有用。以下代码是将日期字符串转换为整数的最佳方法吗?

非常感谢。

2 个答案:

答案 0 :(得分:8)

是的,可以使用Date#year

require 'date'

d = Date.parse("20-08-2013")
d.year # => 2013

答案 1 :(得分:0)

now = Time.now.to_s
# => "2013-09-10 11:09:14 -0500"
fetched_time=DateTime.strptime(now, "%Y-%m-%d").to_s
# => "2013-09-10T00:00:00+00:00"
year =  Date.parse(fetched_time).year
# => 2013
month = Date.parse(fetched_time).month
# => 9
year.class
# => Fixnum
month.class
# => Fixnum

或者

fetched_date=Date.strptime(now, "%Y-%m-%d").to_s
# => "2013-09-10"
date = Date.parse(fetched_date)
# => #<Date: 2013-09-10 ((2456546j,0s,0n),+0s,2299161j)>

您是否宁愿使用Date对象而不是String?时间戳由什么组成?我是Rails和ActiveRecord的新手。

你在设置ActiveRecord :: Base.default_timezone =#是什么?

如果您想知道Date对象中的那些额外数字 尝试将它们插入

Date.jd(2299161)
# => #<Date: 1582-10-15 ((2299161j,0s,0n),+0s,2299161j)>
Date.jd(2456546)
# => #<Date: 2013-09-10 ((2456546j,0s,0n),+0s,2299161j)>

他们是朱利安日数字。最后一个是意大利和一些天主教国家的日历改革。

Date::ITALY
# => 2299161