【问题标题】:How can I get mysql to output a DateTime to Julian day number?如何让 mysql 将 DateTime 输出到儒略日数?
【发布时间】:2011-03-11 09:28:53
【问题描述】:

基本上我使用的是MySQL gem for Ruby,我对日期比较没有合理的支持。 Mysql::Time 类只为我提供了年、月、秒等访问器方法。如果我可以将其转换为 Ruby DateTime 对象,我可以进行更好的日期比较。如何将 MySQL 的 DateTime 字段转换为可以传递给 DateTime.jd 的儒略日数?

【问题讨论】:

  • 小心使用 DateTime.jd,因为我发现它可能不打算与 Date 的 DateTime 子类一起使用。仅适用于 Date 类。要显示这一点,请尝试 DateTime.jd(2455145)。然后将相同的数字插入到aa.usno.navy.mil/data/docs/JulianDate.php 之类的地方,你得到正确的时间了吗?所有不带小数的儒略日数字应显示 12:00 此 jd 用于使用 DateTime 对象进行 Ruby 转换可能是一个错误。如果有人请报告它,因为我不知道从哪里开始。谢谢!使用 DateTime.jd() 只是我的两分钱。
  • 我可以从apidock.com/ruby/DateTime/jd/class 确认这一点,但由于他们提供了解决方案,我将收回我对这个错误的评论。它似乎仍然是错误的。应该有一个类似于 Date 的 Date.ajd() 方法,您可以发送一个儒略日数,并且仍然可以获取时间。 apidock.com/ruby/v1_9_3_392/Date/jd/class 我有点恼火他们总是使用省略号来完成它。必须做你自己的事情才能真正看到它。并且注意 .ajd() 没有提供正确的转换来包含数字 DateTime.ajd(2455145.5) ,我认为这是正确的。

标签: mysql ruby


【解决方案1】:

用途:

TO_DAYS(col)+1721060

转换为儒略日期。

还有:

FROM_DAYS(col-1721060)

从儒略日期转换。

(我使用从午夜开始的朱利安年代日期,因为它更有用。)

【讨论】:

    【解决方案2】:

    您可以使用 MySQL 的 TO_DAYS 函数将日期作为从零年开始的整数天数(只需添加适当的偏移量即可获得 Julian Day number),或者您可以使用 UNIX_TIMESTAMP 函数获取自 1970-01-01 00:00:00 UTC 以来的整数秒数。

    【讨论】:

    • “合适的偏移量”是1721059.5
    • @dan04,我认为 Ruby 希望它是一个 integer,没有 0.5,但我不确定。可能需要进行一些实验。
    【解决方案3】:

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

    【讨论】:

    • 我认为这仍然使用 mysql gem?
    • @Zombies,是的。在底层,它使用 MySQL gem 与 MySQL 进行实际对话。
    • @Zombies:你实际使用的那个。
    【解决方案4】:
    class Mysql::Time
      def to_datetime
        DateTime.civil(year,month,day,hour,minute,second)
      end
    end
    

    【讨论】:

      【解决方案5】:

      这个公式从 2000 年到 2099 年是正确的:

      Julian_date = (YEAR(date)-2000)*1000 + DAYOFYEAR(date)
      

      【讨论】:

      • 嗯,这个是副作用还是bug?
      【解决方案6】:
      SELECT
          DATE_ADD(CONCAT(substring(julian_date,1,2), '-01-01'), INTERVAL substring(julian_date,3,3)-1 DAY) 
      FROM table
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-01-11
        • 1970-01-01
        • 1970-01-01
        • 2022-08-16
        • 2017-09-05
        • 2016-10-11
        • 2013-07-30
        相关资源
        最近更新 更多