使用 Ruby Date 类处理天文数据

2024-04-08

~ 大约太阳正午

lw = 88.743  # my longitude

jdate = Date.ordinal_to_jd(Time.now.year, Time.now.yday)
n = (jdate - 2451545 - 0.0009 - lw / 360).round  # lw is users longitude west of 0.
j_noon = 2451545 + 0.0009 + lw / 360 + n 
puts j_noon

=> 2455616.24740833

作为更新,部分混乱可能是太阳正午是所有 计算从公元前4713年1月1日格林威治中午开始。

Date.ordinal_to_jd 的正确使用并没有弥补这一事实。所以通过 像这样添加或减去 12 小时:

jdn = Date.ordinal_to_jd(Time.now.year, Time.now.yday) - 0.5

我们应该减少错误。自从我们的计算以来,我们只是使用哪个 从昨天中午开始?

该代码是从本页的两个方程推导出来的日出方程 http://en.wikipedia.org/wiki/Sunrise_equation.

我从这里的用户那里得到的第一个答案是我们不明白 0.0009 和 lw / 360。lw / 360 看起来是弧度的小数日 本初子午线。至于0.0009,它一定是一个很小的方差 自公元前 4713 年 1 月 1 日格林威治中午以来的秒数。请参阅 IAU 标准了解更多信息

我根据这个算出是0.007776秒page http://en.wikipedia.org/wiki/Julian_Day.

我有一些来自 Date 类的信息,不包括方法细节。

        =begin
--------------------------------------------------------------------- Class: Date
Class representing a date.

See the documentation to the file date.rb for an overview.

Internally, the date is represented as an Astronomical Julian Day Number, ajd. 
The Day of Calendar Reform, sg, is also stored, for conversions to other date formats. 
(There is also an of field for a time zone offset, 
but this is only for the use of the DateTime subclass.)

A new Date object is created using one of the object creation class methods named  
after the corresponding date format, and the arguments appropriate to that date
format; for instance, Date::civil() 
(aliased to Date::new()) with year, month, and day-of-month, or Date::ordinal() with
year and day-of-year.

All of these object creation class methods also take the Day of Calendar Reform as an
optional argument.

Date objects are immutable once created.

Once a Date has been created, date values can be retrieved for the different date
formats supported using instance methods. For instance, #mon() gives the Civil month,
#cwday() gives the Commercial day of the week, and #yday() gives the Ordinal day of
the year. Date values can be retrieved in any format, regardless of what format was
used to create the Date instance.

The Date class includes the Comparable module, allowing date objects to be compared
and sorted, ranges of dates to be created, and so forth.

---------------------------------------------------------------------------------

Includes:
Comparable(<, <=, ==, >, >=, between?)

Constants:
MONTHNAMES:      [nil] + %w(January February March April May June July August
                            September October November December)
DAYNAMES:        %w(Sunday Monday Tuesday Wednesday Thursday Friday Saturday)
ABBR_MONTHNAMES: [nil] + %w(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)
ABBR_DAYNAMES:   %w(Sun Mon Tue Wed Thu Fri Sat)
ITALY:           2299161
ENGLAND:         2361222
JULIAN:          Infinity.new
GREGORIAN:       -Infinity.new

Class methods:
_load, _parse, _strptime, ajd_to_amjd, ajd_to_jd, amjd_to_ajd, civil, civil_to_jd,
commercial, commercial_to_jd, day_fraction_to_time, gregorian?, gregorian_leap?, jd,
jd_to_ajd, jd_to_civil, jd_to_commercial, jd_to_ld, jd_to_mjd, jd_to_ordinal,
jd_to_wday, julian?, julian_leap?, ld_to_jd, mjd_to_jd, new, now, ordinal,
ordinal_to_jd, parse, s3e, strptime, time_to_day_fraction, today, valid_civil?,
valid_commercial?, valid_jd?, valid_ordinal?, valid_time?

Instance methods:
+, -, <<, <=>, ===, >>, _dump, ajd, amjd, asctime, civil, commercial, ctime, cwday,
cweek, cwyear, day, day_fraction, downto, england, eql?, gregorian, gregorian?, hash,
hour, inspect, italy, jd, julian, julian?, ld, leap?, mday, min, mjd, mon, month,
new_offset, new_start, next, next_day, offset, ordinal, sec, sec_fraction, start,
step, strftime, succ, time, to_s, to_yaml, upto, wday, weeknum0, weeknum1, wnum0, 
wnum1, yday, year, zone

=end

附带说明一下,Ruby 有一种计算儒略日期的方法真是太好了。 我正在研究 Javascript 代码NOAA http://www.srrb.noaa.gov/highlights/sunrise/sunrise.html.

这是我受链接启发而写的一个课程。

class JulianDayNumber

  def initialize(year = 2000, month = 1, day = 1) #defaults to Jan. 01, 2000
    @year = year
    @month = month
    @day = day
  end

  def calcJDN

    if (@month <= 2) then 
      @year -= 1
      @month += 12
    end

    varA = (@year/100).floor
    varB = 2 - varA + (varA/4).floor

    jdn = (365.25*(@year + 4716)).floor \
           + (30.6001*(@month+1)).floor \
           + @day + varB - 1524.5

    return jdn
  end

end

jd = JulianDayNumber.new(2011, 3, 2)
julianday = jd.calcJDN
puts julianday

=> 2455622.5

现在这让我到达那里,但我仍在研究返回这样的数字的方法 作为由最上面的方程计算的那个。尝试一下我们可以看到我们做到了 在 JDN 中获得 0.5 分。谁是对的?红宝石还是 NOAA?


NOAA 使用 2000 年 1 月 1 日的值 2451545.0 从 jd 中减去该值来获取时间 像这样的分数世纪

    def calcTimeJulianCent(j)
      t = (j - 2451545.0)/36525.0
      return t
    end 

Ruby 有多种计算儒略日的方法,您需要选择正确的一种。如您所知,NOAA 自公元前 4713 年 1 月 1 日格林威治中午开始计算 JD。它总是以 0.5 结尾,因为他们省略了小数天数。

Ruby 的儒略日很奇怪:

出于科学目的,它是 方便简单地引用日期 作为一天的计数,从 任意初始日。先说日期 为此选择的是 4713 年 1 月 1 日 公元前。从该日期算起的天数是 儒略日数或儒略日期, 日期中缩写为 jd 班级。这是当地时间,并且 从最初的午夜开始计算 天。

这对于天文用途来说毫无意义。可是等等..

更严格的用法是在 UTC 中,并且 从第一天的中午开始计算。 这是在 Date 类中引用的 作为天文儒略日数, 并缩写为 ajd。在日期中 类,天文儒略日 数字包括小数天数。

(rubydoc http://stdlib.rubyonrails.org/libdoc/date/rdoc/index.html)

这就是您正在寻找的,并且。只需获取不带小数天数即可:

julianday = Date.civil(@year, @month, @day).ajd
puts julianday

=> 2455622.5

无需从 NOAA 移植 9 行 JavaScript。 Ruby 为你提供支持! ;)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Ruby Date 类处理天文数据 的相关文章

  • 如何在 Ruby 中将“Access-Control-Allow-Origin”标头添加到 API 响应

    我正在面试前端开发人员的工作 并接受了构建简单前端界面的编码测试 我已经得到了服务器 它是用 Ruby 2 1 3 编写的 有 3 个端点 我将在前端客户端中使用它们 我对 Ruby 没有任何经验 但我按照他们的说明设置服务器 它似乎有效
  • 什么是“太聪明”的 Ruby 代码示例? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在与一些程序员朋友进行讨论 他们说他们看到 Ruby 程序员 尤其是 编写了很多 太聪明 的代码 所以我想知道那会是什么样子 我指
  • 验证 ActionCable 连接

    我发现了一个很棒的 ActionCable gem 它是 SPA 的一个很好的解决方案 我只想发送html css and js资产 所有其他连接将通过ActionCable 交换字符串或者整数并不难 但是如何通过ActionCable登录
  • 类、模块、它们的特征类和方法查找

    我们来开公开课吧Module并向其中添加一个方法 class Module def foo puts phew end end 我可以通过这样做来调用这个方法 Class foo 这是可以理解的 因为类Class is Class 其超类是
  • 在 Ruby 中跨多个类实例记忆数据的好方法是什么?

    考虑 生成数据的对象的许多实例 如果每次运行只生成一次该数据 那就太好了 class HighOfNPeriods lt Indicator def generate data indicator data DataStream new 0
  • 如何将两个不同的哈希数组中的值添加在一起?

    我有两个哈希数组 哈希值的键不同 player scores1 first name gt Bruce score gt 43 time gt 50 first name gt Clark score gt 45 minutes gt 20
  • 如何覆盖 Ruby Ranges 的 .. 和 ... 运算符以接受 Float::INFINITY?

    我想覆盖 and Ruby 中的运算符Range 原因是 我正在处理数据库中的无限日期范围 如果你拉一个infinty从 Postgres 中取出日期时间 你会得到一个Float INFINITY在红宝石中 问题是 我无法使用Float I
  • 如何使 Rails 3 资源预编译速度更快?

    我有一个正在运行的 Rails 3 2 1 应用程序 我正在通过 Capistrano 进行部署deploy assets它运行deploy assets precompile task 一切工作都很好 除了编译本身非常慢 我没有那么多 C
  • Ruby 中多维数组的帮助

    我有以下代码将字符串拆分为 3 个字节的组 str hello ix 0 iy 0 bytes tby str each byte do c if iy 3 iy 0 bytes ix tby each index do i bytes i
  • “没有可用的二元红宝石”是什么意思?

    每当我使用rvm install x x x 即使安装成功 我也会收到此警告 No binary rubies available for osx 10 12 x86 64 ruby 2 4 0 Continuing with compil
  • 转储 YAML 时如何强制使用双引号?

    我有一个小脚本来自动化 YAML 文件中的一些操作 我读取原始 YAML 文件并将其转换为哈希 然后dump http ruby doc org stdlib 1 8 6 libdoc yaml rdoc YAML html method
  • 可以覆盖/实现的 ruby​​ 运算符列表

    是否有可以覆盖的所有 ruby 运算符的列表 不是那些不能的 Here s Ruby 运算符表 http phrogz net programmingruby language html table 18 4 方法和可重载的有 Elemen
  • 预期的 ProductField,出现数组问题

    我有一个 Rails 4 应用程序 它有一个如下所示的 params 块 def store params params require store permit name description user id products attr
  • 在私有控制器方法中返回redirect_to

    前言 我正在使用设备进行身份验证 我试图阻止未经授权的用户查看 编辑或更新其他用户的信息 我最关心的是用户将 DOM 中的表单修改为另一个用户的 ID 填写表单 然后单击更新 我已经专门阅读过 像下面这样的东西应该有效 但事实并非如此 SO
  • Ruby 枚举器中的“break”与“raise StopIteration”

    如果我使用 Ruby Enumerators 来实现生成器和过滤器 generator Enumerator new do y x 0 loop do y lt lt x x 1 break if x gt CUTOFF end end l
  • 使用 attr_accessor 动态创建类属性

    在Ruby中 有没有办法动态地将实例变量添加到类中 例如 class MyClass def initialize create attribute name end def create attribute name attr acces
  • 我在 Rails 中使用了保留字吗?

    这是我的模型 class Record lt ActiveRecord Base belongs to user belongs to directory end class Directory lt ActiveRecord Base h
  • REXML - 如何提取单个元素

    我正在用 ruby 编写一些验收测试 其中涉及断言响应 XML 中值的存在 我的 XML 是这样的
  • Nokogiri 保持 HTML 实体不变

    我希望 Nokogiri 保持 HTML 实体不变 但它似乎正在将实体转换为实际的符号 例如 Nokogiri HTML fragment p reg p to s 结果是 p p 似乎没有什么可以将原始 HTML 返回给我 inner h
  • RoR - Rails 中的大文件上传

    我有一个 Rails Web 应用程序 允许用户上传视频 视频存储在 NFS 安装的目录中 当前的设置适用于较小的文件 但我也需要支持大文件上传 最多 4GB 当我尝试上传 4GB 文件时 它最终会发生 但从用户体验的角度来看很糟糕 上传开

随机推荐

  • SQL增加重复值的计数?

    不知道如何问这个问题 我不是在寻找列中值的总数 而是想增量计算重复值 例如 如果我的表看起来像这样 1 ken 2 ken 3 adam 4 ken 5 adam 6 dan 我想在选择过程中添加一列 该列的标签与增量编号重复 如下所示 1
  • 如何获取 Jetty 线程转储?

    我有一个Ubuntu 服务器 10 10 64 位运行网络应用程序码头 6 1 24 6 on Sun 的 JVM 都从标准 Ubuntu 存储库安装 我正在尝试找出该服务器的问题 一段时间后 100 cpu 它可能与 NIO 选择器上的已
  • 使用 pgadmin 连接到远程服务器

    我正在使用 Linode 的本教程 https library linode com databases postgresql pgadmin macos x https library linode com databases postg
  • Sequelize js - 限制和排序错误

    在sequelize js中对查询进行排序的正确方法是什么 例子 db model findAll where conditions order postDate DESC limit 10 offset 0 include model1
  • 如何将对象作为数据类型传递给sequelize中的数据模型?

    我需要将一些不是原始数据类型的东西传递给数据类型 我正在构建类似的东西以发送到 create 方法 const p2 location model latitude lat longitude lng establishment id cr
  • Powershell PromptForChoice - 如何编辑描述?

    我需要创建脚本 该脚本将根据用户输入运行不同的代码块 为此 我在 PS 中使用 PromptForChoice 方法 我的代码目前如下所示 title Disk clear question What do you want to remo
  • 如何在 RecyclerView 中使用拖动手势进行多选?

    这是一个很短的问题 最近 谷歌更新了其材料设计指南 表明多选项目应该像谷歌照片应用程序一样 here https material io guidelines patterns selection html selection usage
  • 如何停止 Visual Studio 缓存导入的 MSBuild 脚本?

    我有一个 csproj 文件 它引用一个共享的 MSBuild 脚本
  • 添加一个复选框以在 Woocommerce 中显示/隐藏结帐字段

    让我们浏览一下这个场景 客户在结帐页面上 有一个复选框 其中包含文字 这是礼物吗 如果选中该复选框 下面的字段将淡入以记笔记 基于这个线程和其他一些线程 这里是我的代码 add filter woocommerce checkout fie
  • RxJava,改造错误:预期为 BEGIN_ARRAY,但在第 1 行第 2 列路径 $ 处为 BEGIN_OBJECT

    我正在使用改造和RxJava库并尝试解析此网址 https api myjson com bins tdze5 我的代码如下 API接口 java public interface APIService GET bins tdze5 Obs
  • 包装函数的函数名称? [复制]

    这个问题在这里已经有答案了 如何获取原始函数的名称 def wrap f def wrapped f args kwargs do something return wrapped f wrap def A params do someth
  • SQL - 如何只获取小数点后的数字?

    如何只获取小数点后的数字 例子 2 938 938 尝试这个 SELECT num 1
  • SQL 查询将一列数字变成字符串

    是否可以转换大字符串中的双精度列 就像是 att1 123 2 3 6 6 77 23 43 4 78 7 6 123 2 9 6 1 77 3 43 24 78 76 6 411 5 346 5 975 75 162 788 4 5 16
  • 如何为 GKE 服务创建 Google CDN

    我已经在 GKE kubernetes 上部署了一个 WordPress 网站 我可以像 mysite test com 这样从互联网访问我的网站 并且工作起来就像一个魅力 现在我想使用Google CDN来加速访问 我尝试过使用 Ingr
  • 如何更改 Visual Code Studio 提交作者

    我不知道为什么 但我的 Visual Studio Code 显示错误的提交作者姓名 我正在尝试更改提交的作者 我怎样才能做到这一点 我已经有很多东西了 但没有运气 这是我尝试过的 由于我有三个提交 所以我尝试了git rebase i H
  • 如何排除“git diff-index”中的文件

    我正在使用 git 预提交挂钩来检查提交 预提交脚本基本上做了一件事 exec git diff index check cached HEAD 它还做了一些其他事情 但它们与本次讨论无关 问题是 我的存储库中有各种各样的文件 但并非所有文
  • 通过单击按钮旋转/翻转两种布局

    我有两个布局 xml 文件 我想从一个页面翻转到另一个页面 这两个 xml 文件是 main xml 和 register xml 如果我单击 main xml 中的登录按钮 页面应该翻转并显示 register xml并且在 regist
  • 在 Anaconda 中安装 Kivy

    我正在尝试在 Windows 7 的 Anaconda 3 4 1 1 中安装 Kivy 但我找不到合适的用户指南来指导我如何安装 但到目前为止 我能够在链接上找到在 OS X 上安装它的说明https github com kivy ki
  • matplotlib 中的曲面图

    我有一个 3 元组列表 表示 3D 空间中的一组点 我想绘制一个覆盖所有这些点的曲面 The plot surface函数在mplot3d包要求参数 X Y 和 Z 为二维数组 是plot surface绘制曲面的正确函数以及如何将数据转换
  • 使用 Ruby Date 类处理天文数据

    大约太阳正午 lw 88 743 my longitude jdate Date ordinal to jd Time now year Time now yday n jdate 2451545 0 0009 lw 360 round l