2010-07-03 57 views
2

基本上我使用的是MySQL gem for Ruby,我没有合理的日期比较支持。 Mysql::Time类只给了我像年,月,秒等accessor方法。我可以做更好的日期比较,如果我可以把它变成一个Ruby DateTime对象。如何将MySQL的日期时间字段转换为可以传递给DateTime.jd的Julian日期编号?我怎样才能让mysql输出一个DateTime到Julian天数?

+0

小心使用DateTime.jd因为我已经发现,它可能不是已经打算与日期时间子类中使用的的日期。仅对Date类是正确的。为了显示这个尝试DateTime.jd(2455145)。然后插入相同的数字到这里http://aa.usno.navy.mil/data/docs/JulianDate.php你有没有得到正确的时间?所有没有小数的Julian Day数字都应该显示12:00这个使用DateTime对象进行Ruby转换的jd可能是一个bug。如果是这样的话,请有人报告,因为我不知道该从哪开始。谢谢!只是我使用DateTime.jd()的两分钱。 – 2013-11-16 12:38:12

+0

我可以从http://apidock.com/ruby/DateTime/jd/class证实这一点但是,由于他们展示了一个解决方案,我将收回我对该错误的评论。它似乎还是错误的。对于Date.ajd()应该有一个像Date一样的方法,您可以发送一个Julian日数字,并且仍然可以获得时间。 http://apidock.com/ruby/v1_9_3_392/Date/jd/class我有些恼火,他们总是使用省略号来敲定它。必须做你自己的事情才能真正看到它。并注意.ajd()不提供适当的转换,以包含数字DateTime.ajd(2455145.5),因为我认为这是正确的。 – 2013-11-16 13:15:39

回答

1

考虑使用Ruby/DBI而不是直接使用MySQL gem。 Ruby/DBI应该自动地为您转换为标准Ruby类,并且如果您更改了正在运行的DBMS,则作为额外的附加功能,您对DBI的使用不会改变。

+0

我拿它这个还是用mysql的宝石? – Zombies 2010-07-04 12:56:22

+0

@僵尸,是的。在引擎盖下,它使用MySQL gem来实际与MySQL交谈。 – 2010-07-04 13:08:22

+0

哪一个选择为接受的答案? – Zombies 2010-07-07 20:17:45

2

你可以使用MySQL的TO_DAYS功能来获得日期为一个整数天数从年初的零(和只添加适当的偏移,以一个Julian Day number),或者你可以使用UNIX_TIMESTAMP函数来获得的整数倍自1970-01-01 00:00:00 UTC以来的秒数。

+0

“适当的偏移”是1721059.5 – dan04 2010-07-04 05:00:35

+0

@ dan04,我认为Ruby希望它是一个*整数*,没有0.5,但我不确定。一些实验可能是为了。 – 2010-07-04 11:27:47

1
class Mysql::Time 
    def to_datetime 
    DateTime.civil(year,month,day,hour,minute,second) 
    end 
end 
4

用途:

TO_DAYS(col)+1721060 

要转换为Julian日期。

和:

FROM_DAYS(col-1721060) 

从Julian日期转换。

(我使用它始于午夜,因为它更实用的年代公历日期。)