2010-07-03 61 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日期轉換。

(我使用它始於午夜,因爲它更實用的年代公曆日期。)