0

'大文字を使用してください。定数です。

私はルビーの日付ヘルパーを学ぶのを楽しんでいます。

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" 

楽しいもの!しかし、グレゴリオ暦、ジュリアン暦、イングランド、イタリア(!)の定数についてはどうでしょうか。それらは何のためにありますか/どのように使用しますか?私は出力することができます:

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

また

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)> 

以下から、ジュリアンは数日ずれているカレンダーのように見えます。数世紀前にカレンダーのリセットについて学んだことを覚えているので、それは理にかなっていますが、イギリスとイタリア、およびそれらがどのように使用されるかはまだわかりません。

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)> 
4

3 に答える 3

1

西洋では、年、月、日を使って日付を表現するのが一般的です。これは、カレンダーの定義が過去に変更されていなければ、履歴の任意の日を表現するのに最適な方法です。

今日私たちが知っているカレンダーは、ユリウス・セザールによって導入されたため、ユリウス暦として知られています。残念ながら、小さな欠陥がありました。ユリウス暦では、うるう年の概念を4年ごとに使用して、1年が正確に365日ではなく、約365。25日であるという事実を補っています。しかし、これは完全には正しくありません。実際、1年は少し短く、4年ごとにうるう年を追加すると、このエラーは数百年以上になり、遅かれ早かれ丸1日オフになります。

今日、うるう年は4年ごとにありますが、年を100で割り切れる場合は、1000で割り切れる場合を除いて、うるう年はありません。これは、年間約365。2425日で行われます。改革は、それを導入した教皇グレゴリウス13世にちなんでグレゴリオ暦と呼ばれています。さらに複雑にするために、グレゴリオ暦がすべての国で同時に導入されたわけではありません。そのスイッチがなければ、ユリウス暦は今日の時点ですでに13日オフになっているでしょう。

RubyでDateオブジェクトを作成するときは、次の4つの定数のいずれかを使用できます。

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-09-14は、大英帝国、したがってアメリカ植民地がグレゴリオ暦を導入した日付です。

を使用するDate::GREGORIANと、Dateオブジェクトは、日付に関係なく、グレゴリオ暦が常に配置されているかのように動作します。すべての日付は、改革前の日付も含めて、グレゴリオ暦の日付として解釈されます。

を使用するDate::JULIANと、Dateオブジェクトは、この日付の再編成が存在しなかったかのように動作します。すべての日付は、ユリウス暦に従って解釈されます。

正しい値は何ですか?まあ、ありません。過去の日付を処理したくない場合は、それ以外の値でもかまいませんDate::JULIAN。過去の日付を処理する必要がある場合は、これらの日付がどのカレンダーを参照しているかを知る必要があります。

最後に、これらの定数の1つを渡す代わりに、グレゴリオ暦への切り替えが行われたユリウス日数として解釈される整数値を渡すこともできます。一部の国では、利用可能な定数で表されていない別の日付に切り替えたため、これは便利です。

于 2019-06-29T02:30:41.133 に答える
0

ext / date / date_core.cに移動して、そこに値を取得することができます。はい、定数ですが、使い方を聞いてきました。あなたの質問はそれらをどのように抽出するかということです。目的の日時を作成するためのデータを指定して、DateオブジェクトとDateTimeオブジェクトを計算するための使用法があります。

たとえば、これは特定の値を持つ要素を持つものになります。

#<DateTime: 2017-01-06T12:05:55+00:00 ((2457760j,43555s,553855002n),+0s,2299161j)>

すべての部品に気づきましたか?それらのうちの2つは、番号の後にjが付いています。それらを計算することは、これらの定数の目的であり、クラスオブジェクトの一部です。それらを使用する多くの方法があり、同様に多くのタイプがあります。ウィキペディアのユリウス日をよく読んでください。これらすべての異なる値については、表を参照してください。マイケルがあなたに言及したことに関連しているので、歴史も興味深いです。

それらのうちの2つについて取得した値に関しては、それらもクラスであることに注意してください。これは、システムが数値を処理できる時間の前後の距離に関連しているため、これも興味深いことです。

インフィニティ

于 2017-01-04T01:44:42.240 に答える
-1

すべての定数は、ドキュメントで説明されています。経験則として、以下の説明があなたにとって何の意味もない場合は、おそらくそれらの定数についてまったく心配する必要はありません。

イングランドイングランドとその植民地の暦改革の日のユリウス日番号。

グレゴリオ暦先発グレゴリオ暦の暦改革の日のユリウス日番号

イタリアイタリアおよび一部のカトリック諸国の暦改革の日のユリウス日数。

ユリウス暦先発ユリウス暦の暦改革日のユリウス日番号

さまざまなカレンダーシステムの詳細は次のとおりです。

于 2012-08-06T21:04:14.277 に答える