如何使用 ruby​​ 日期常量 GREGORIAN、JULIAN、ENGLAND 甚至 ITALY

2024-01-07

'因为大写,它们是常量。

我很高兴学习 ruby​​ 的日期助手。

1.9.3p125 :057 > Date::ABBR_MONTHNAMES
 => [nil, "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] 
1.9.3p125 :058 > Date::ABBR_DAYNAMES
 => ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"] 
1.9.3p125 :059 > Date::MONTHNAMES
 => [nil, "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"] 
1.9.3p125 :060 > Date::DAYNAMES
 => ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] 
1.9.3p125 :070 > Date::MONTHNAMES[Time.new.month]
=> "August" 

好玩的东西!但是 GREGORIAN、JULIAN、ENGLAND 和 ITALY (!) 常数又如何呢?它们的用途是什么/如何使用它们? 我可以输出:

1.9.3p125 :061 > Date::GREGORIAN
 => -Infinity 
1.9.3p125 :062 > Date::JULIAN
 => Infinity 
1.9.3p125 :063 > Date::ENGLAND
 => 2361222 

or

1.9.3p125 :067 > Date.new
 => #<Date: -4712-01-01 ((0j,0s,0n),+0s,2299161j)> 
1.9.3p125 :068 > Date.new.new_start(Date::JULIAN)
 => #<Date: -4712-01-01 ((0j,0s,0n),+0s,Infj)> 
1.9.3p125 :069 > Date.new.new_start(Date::ENGLAND)
 => #<Date: -4712-01-01 ((0j,0s,0n),+0s,2361222j)> 

从下面的内容看来,Julian 日历是有几天偏差的。我记得几个世纪前就知道了日历重置,所以这是有道理的,但是英格兰和意大利以及它们将如何使用对我来说仍然不清楚。

1.9.3p125 :076 > Date.new(1977,7,1).new_start(Date::ENGLAND)
 => #<Date: 1977-07-01 ((2443326j,0s,0n),+0s,2361222j)> 
1.9.3p125 :077 > Date.new(1977,7,1).new_start(Date::ITALY)
 => #<Date: 1977-07-01 ((2443326j,0s,0n),+0s,2299161j)> 
1.9.3p125 :078 > Date.new(1977,7,1).new_start(Date::JULIAN)
 => #<Date: 1977-06-18 ((2443326j,0s,0n),+0s,Infj)> 

在西方世界,通常使用年、月和日来表示日期。如果我们的日历的定义在过去没有改变的话,这将是表达历史上任何一天的完美方式。

我们今天所知的历法是由朱利叶斯·凯撒 (Julius Cesar) 提出的,因此被称为儒略历。不幸的是,它有一个小缺陷:儒略历使用每四年一次闰年的概念来弥补一年并非精确的 365 天而是大约 365.25 天的事实。但这并不完全正确。一年实际上要短一些,如果每四年添加一个闰年,这个误差将在数百年的时间内累加起来,迟早你会偏离一整天。

今天,我们每四年就有一个闰年,但如果年份能被 100 整除,则不会,除非它也能被 1000 整除。这样一来,一年大约有 365.2425 天。这项改革被称为格里高利历,以教皇格里高利十三世的名字命名。更复杂的是,公历并不是在每个国家同时引入的。如果没有这个转换,儒略历从今天开始就已经晚了 13 天。

在 Ruby 中创建 Date 对象时,可以使用四个常量之一:

Date.new(2019, 6, 29, Date::ITALY)
Date.new(2019, 6, 29, Date::ENGLAND)
Date.new(2019, 6, 29, Date::GREGORIAN)
Date.new(2019, 6, 29, Date::JULIAN)

如果你使用Date::ITALY,如果您根本不指定任何内容,则这是默认值,然后 1582-10-15 之前的日期将被解释为儒略历日期,所有其他日期将被解释为公历日期。 1582年10月15日是意大利引入公历的日期。

如果你使用Date::ENGLAND,那么 1752-09-14 之前的日期将被解释为儒略历日期,所有其他日期将被解释为公历日期。 1752 年 9 月 14 日是大英帝国以及美洲殖民地引入公历的日期。

如果你使用Date::GREGORIAN,Date 对象的行为就像公历一直都在适当的位置,无论是哪个日期。所有日期,甚至宗教改革之前的日期都被解释为公历日期。

如果你使用Date::JULIAN,Date 对象的行为就像此日期改革从未存在过一样。所有日期均根据儒略历解释。

正确的值是多少?嗯,没有。如果您不想处理历史日期,则可以使用除Date::JULIAN可能会没事的。如果您需要处理历史日期,您需要知道这些日期引用的是哪个日历。

最后,您还可以传递一个整数值,而不是传递这些常量之一,该整数值被解释为切换到公历的儒略日数。这很有用,因为某些国家/地区在不同的日期进行切换,而这些日期并未由任何可用常量表示。

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

如何使用 ruby​​ 日期常量 GREGORIAN、JULIAN、ENGLAND 甚至 ITALY 的相关文章

  • 如何从 Ruby 检查具有特定 pid 的进程是否正在运行?

    如果有多种方法 请列出 我只知道一个 但我想知道是否有一种更干净的 Ruby 方式 之间的区别Process getpgid and Process kill方法似乎是当 pid 存在但由另一个用户拥有时发生的情况 Process getp
  • 标记(lex?parse?)正则表达式

    使用 Ruby 我想获取一个 Regexp 对象 或表示有效正则表达式的字符串 您的选择 并将其标记化 以便我可以操作某些部分 具体来说 我想采用这样的正则表达式 字符串 regex var w parts foo bar 并创建一个替换字
  • SQL:每天选择最接近特定时间的一条记录

    我有一张表存储某个时间点的值 CREATE TABLE values value DECIMAL datetime DATETIME 每一天可能有多个值 也可能某一天只有一个值 现在我想获取给定时间跨度 例如一个月 内最接近一天中给定时间的
  • BigDecimal 无法强制转换为 BigDecimal

    这应该很简单 但它却爆炸了 有任何想法吗 d BigDecimal new 2 0 YAML load a gt d to yaml TypeError BigDecimal can t be coerced into BigDecimal
  • R 根据事件更新值

    我最近发布了这个问题 该问题已经与我在笔记本电脑上本地使用的 Mysql 数据库相关 由于我在 Mysql 中没有找到问题的解决方案 其他人似乎也没有找到解决方案 所以我想再次发布它 但现在与 R 相关 我使用带有 RMysql 包的数据库
  • flutter 中 Future.delayed 与 Timer 有什么区别

    我想知道延迟代码执行的 Future delayed 和 Timer 方法之间的区别 两者似乎都做同样的事情 未来 延迟 Future delayed const Duration milliseconds 500 code VS Time
  • 使用 Ruby 获取 AWS 区域名称

    我正在为 AWS 开发 Rails 应用程序 并希望为区域名称创建下拉菜单 例如 us east 1 等 如果有人已经创建了 gem 来获取它们 我想使用它 有人知道这样的 gem 或有用的 API 吗 适用于 Ruby 的 AWS 开发工
  • ruby on Rails,会话过期通知

    我正在使用 ruby 1 9 3 和 Rails 3 2 我的实际会话处理如下所示 会话助手 def sign in user cookies remember token value user remember token expires
  • gem install rmagick 在 OS X El Capitan 上失败

    几天前我升级到 El Capitan 并运行了 brew update brew upgrade 它更新了 imagemagick 导致 ruby 的 rmagick gem 停止工作 我想没问题 我就跑 gem install rmagi
  • 字符串到 ZonedDateTime 正在更改格式

    String ip 2011 05 01T06 47 35 422 05 00 ZonedDateTime mzt ZonedDateTime parse ip toInstant atZone ZoneOffset UTC System
  • 在 x 轴上操作日期 Pandas Matplotlib

    我有一组非常简单的数据 如下所示 我正在寻找一种方法来绘制此堆积条形图并格式化 x 轴 日期 使其从 1996 年 31 月 12 日开始 到 2016 年 31 月 12 日结束 增量为 365 天 我编写的代码绘制了每个日期 因此 x
  • 计算按月分隔的两个日期之间的天数

    我需要计算两个日期之间的天数 DateTime 但有一个转折 我想知道这两天跨越的每个月有多少天 两个人有简单的方法吗 Example 我的开始日期是 30 03 2011 结束日期是 05 04 2011 那么结果应该是这样的 var r
  • 在任意时间范围内找到最佳日/月/年间隔的算法?

    如果您有时间表 请说 March 19 2009 July 15 2011 是否有一种算法可以将该时间范围分解为 March 19 2009 March 31 2009 complete days April 1 2009 December
  • 使用 YAML.load 解析 json 安全吗?

    我使用的是红宝石2 1 0 我有一个 json 文件 例如 测试 json item apple 1 banana 2 使用 YAML load 加载此文件是否安全 YAML load File read test json 我正在尝试加载
  • C# Julian 日期解析器

    我在电子表格中有一个单元格 它是 Excel 中的日期对象 但当它来自 C1 的 xls 类时 它会变成双精度型 类似于 2009 年 1 月 7 日的 39820 0 我读到这是儒略日期格式 有人可以告诉我如何在 C 中将其解析回 Dat
  • Ruby 可选参数和多个参数

    我试图将方法的第一个参数设置为可选 后跟任意数量的参数 例如 def dothis value 0 args 我遇到的问题是 这似乎实际上不可能 当我打电话时dothis hey how are you good 我希望它将值设置为默认值
  • 在 SQL Server 中处理日期

    我正在开发一个 ASP NET 网站 我从网页获取日期 然后根据用户输入我想从 SQL Server 数据库获取结果 使用存储过程 问题是我只能从用户界面获取这种格式的日期2016 10 08这是字符串类型 但在数据库中 我有一个类型为da
  • ||= 是什么意思? [复制]

    这个问题在这里已经有答案了 我的应用程序控制器中有一个受保护的方法 def current user current user User find by id session user id end 我想知道什么 方法 我一直在努力寻找和找
  • 下载所有 gems 依赖项

    我想通过下载任何所需的文件并将它们带到另一台计算机来安装指南针没有互联网连接 我已经下载了指南针的源包 当我在未连接的计算机上运行 gem 时 它抱怨缺少依赖项 有什么解决办法吗 这正是我遇到的问题 经过一段时间的搜索后 我找到了一个可以使
  • 在 PostgreSQL 中使用月份名称排序

    我有一个表 其中有一个字段 Month Name 它包含月份的名称 我想按月份名称排序 不是按字母顺序 而是按实际顺序 例如一月 二月等 如何使用 PostgreSQL 实现此操作 有什么方法可以将月份名称转换为其数值吗 id billed

随机推荐

  • Hakyll 网站的根源是什么?

    我看到创建函数需要一个标识符列表 ghci gt t create create Identifier gt Rules gt Rules 我应该使用什么标识符列表来匹配网站的根目录 例如 我只想制作一个出现在 www example co
  • GPS信号强度计算

    我想使用 NET CF 显示 GPS 设备的信号栏 我能够读取 NMEA 数据并获取 SNR 信号 但它们是许多卫星 有些处于活动状态 有些处于不活动状态 信噪比各不相同 我考虑过获取总 SNR 的平均值 但它不会给出准确的值 因为三颗强信
  • 编辑摊牌:在句子末尾保留换行符

    编辑非所见即所得 LaTeX HTML 等 散文时 您可能希望在句子末尾添加换行符 这有几个优点 更容易重新排列句子 更容易注释句子 更容易发现连续 过长的句子 评论更方便on句子 例如 The following isn t strict
  • 是否可以在 Selenium 中捕获 POST 数据?

    我正在与Selenium http seleniumhq comWebDriver 工具 我想知道该工具是否提供了一种捕获提交表单时生成的 POST 数据的方法 我正在使用 django 测试框架来测试我的数据是否在后端正确处理 我想使用
  • 这是什么 ANT 版本?

    我是 java Eclipse 的新手 我安装了 eclipse 并使用它作为 IDE 来处理 JAVA 1 4 文件 我更改了代码并保存了它并想要运行 cntr F11 或调试 F11 每次我得到 select what to run A
  • WTForms:FormField 的 FieldList 无法加载嵌套数据

    我在 FieldList 内的 FormField 内有一个自定义字段 地点 class LocationForm Form id HiddenField id title StringField l Title Required loca
  • 加载特定 MIME 类型的本机客户端 Chrome 扩展

    我为 Google Chrome Web 浏览器创建了一个本机客户端应用程序 用于播放特殊类型的音频文件 伟大的 此时该部分效果很好 我已准备好进入下一阶段 与世界分享这个应用程序 我需要这部分的帮助 根据我的理解 分发此应用程序的最佳方法
  • 如何预加载 angular2 视图,以便在首次加载时不会闪烁白页?

    我正在用纯 JS 构建一个 Angular 2 应用程序 我的问题是 当我从一个页面更改到另一个页面时 它会闪烁白色页面 直到呈现新视图 仅当我第一次访问所有组件时 才会发生这种情况 如果我第二次转到相同的路线 则页面加载时不会出现白页 我
  • 如何调整分面 tmap 图中的分面行标签高度?

    我正在使用带有行和列的 tmap 包绘制多面地图 我无法调整行的分面标签的高度 这会导致分面标签在大于特定大小或旋转时被裁剪 我已经尝试调整所有tm layout 小组的论据包括panel label height panel label
  • Ansible 循环相关问题

    我有一个剧本 其中有多个角色和串行设置 因此它首先在一台机器上运行 然后在其余机器上运行 在其中一个角色中 我有以下任务 name getting dbnodes IP addresses local action shell echo f
  • WPF 组合框样式

    下面是我的 ComboBox 样式代码 想法是在 ComboBox 周围放置边框并重用该样式
  • 我无法运行 hello.py 并获取 SyntaxError: invalid syntax

    我对 Python 和整个编程都很陌生 很抱歉问了一个看似重复的问题 但是 我无法使用以下格式运行我自己的代码 C Users Archangel gt python hello py 这是 hello py 包含的内容 Define a
  • 递归或循环[重复]

    这个问题在这里已经有答案了 我有这个方法可以计算一些统计数据 public void calculateAverage int hour if hour 20 int data 0 int times 0 for CallQueue cq
  • “+”(加号)CSS 选择器是什么意思?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 例如 p p Some declarations 我不知道是什么 方法 这和仅仅定义样式
  • HTTPS 从根域(即 apex 或“naked”)重定向到“www”子域,而浏览器不会抛出异常?

    DNS A 记录要求将 IP 地址硬编码到应用程序的 DNS 配置中 哪个Heroku 建议避免 https devcenter heroku com articles apex domains Heroku 建议两种解决方法 使用在顶端支
  • 定期刷新 golang 中的通道

    我需要定期刷新频道的内容 我用 len 做到了这一点 我想知道是否有更好的方法来做到这一点 http play golang org p YzaI 2c F http play golang org p YzaI 2c F package
  • iOS 上的波形

    我正在寻找如何绘制声音幅度 I found http supermegaultragroovy com 2009 10 06 drawing waveforms http supermegaultragroovy com 2009 10 0
  • Preon 的 Java 或 C++ 等效项?

    Preon https github com preon preon是一个用于创建二进制编解码器的 Java 库 您只需在类的数据成员中放置关于它们与位字段的对应关系的注释 例如用于特定字段的位数 并且基于此类 该库构建一个 Codec 对
  • 如何在渲染后动态更改 ExtJS GridPanel viewconfig 上的 getRowClass 函数

    我有一个Ext grid Panel使用返回自定义类的函数 该自定义类用于通过重写 getRowClass 函数对网格中的行进行颜色编码 这很好用 但我想为用户提供更改网格着色标准的选项 在下面的示例中 我按 严重性 属性进行着色 但我想将
  • 如何使用 ruby​​ 日期常量 GREGORIAN、JULIAN、ENGLAND 甚至 ITALY

    因为大写 它们是常量 我很高兴学习 ruby 的日期助手 1 9 3p125 057 gt Date ABBR MONTHNAMES gt nil Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov De