我怎样才能让mysql输出一个DateTime到Julian天数?
基本上我使用的是MySQL gem for Ruby,我没有合理的日期比较支持。 Mysql::Time
类只给了我像年,月,秒等accessor方法。我可以做更好的日期比较,如果我可以把它变成一个Ruby DateTime对象。如何将MySQL的日期时间字段转换为可以传递给DateTime.jd
的Julian日期编号?我怎样才能让mysql输出一个DateTime到Julian天数?
你可以使用MySQL的TO_DAYS
功能来获得日期为一个整数天数从年初的零(和只添加适当的偏移,以一个Julian Day number),或者你可以使用UNIX_TIMESTAMP
函数来获得的整数倍自1970-01-01 00:00:00 UTC以来的秒数。
“适当的偏移”是1721059.5 – dan04 2010-07-04 05:00:35
@ dan04,我认为Ruby希望它是一个*整数*,没有0.5,但我不确定。一些实验可能是为了。 – 2010-07-04 11:27:47
class Mysql::Time
def to_datetime
DateTime.civil(year,month,day,hour,minute,second)
end
end
用途:
TO_DAYS(col)+1721060
要转换为Julian日期。
和:
FROM_DAYS(col-1721060)
从Julian日期转换。
(我使用它始于午夜,因为它更实用的年代公历日期。)
小心使用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
我可以从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