Dates

Datesモジュールは、日付を扱うための2つのタイプを提供します:DateDateTimeで、前者は日単位、後者はミリ秒単位の精度を表します。両者は抽象型TimeTypeのサブタイプです。異なるタイプの動機はシンプルです:いくつかの操作は、より高い精度の複雑さに対処する必要がないとき、コードと精神的な推論の両方の観点からはるかに簡単になります。例えば、4d61726b646f776e2e436f64652822222c2022446174652229_40726566タイプは単一の日付の精度(すなわち、時間、分、または秒は含まれない)にのみ解決されるため、タイムゾーン、夏時間、うるう秒に関する通常の考慮事項は不要であり、回避されます。

両方の DateDateTime は基本的に不変の Int64 ラッパーです。いずれのタイプの単一の instant フィールドは実際には UTInstant{P} タイプであり、これは UT 秒に基づく連続的に増加する機械のタイムラインを表します [1]4d61726b646f776e2e436f64652822222c20224461746554696d652229_40726566 タイプはタイムゾーンを認識していません(Python の用語で言うと naive)、Java 8 の LocalDateTime に類似しています。追加のタイムゾーン機能は TimeZones.jl package を通じて追加できます。これは IANA time zone database をコンパイルします。両方の 4d61726b646f776e2e436f64652822222c2022446174652229_407265664d61726b646f776e2e436f64652822222c20224461746554696d652229_40726566 は、プロレプティックグレゴリオ暦に従う ISO 8601 標準に基づいています。1つの注意点は、ISO 8601 標準が BC/BCE 日付に関して特に厳密であることです。一般的に、BC/BCE 時代の最終日である 1-12-31 BC/BCE の後には 1-1-1 AD/CE が続くため、年ゼロは存在しません。しかし、ISO 標準では 1 BC/BCE が年ゼロであると述べているため、0000-12-310001-01-01 の前日であり、年 -0001(はい、年のマイナス1)は 2 BC/BCE であり、年 -0002 は 3 BC/BCE です。

Constructors

Date および DateTime タイプは、整数または Period タイプによって構築することができ、パースまたはアジャスターを通じて行うことができます(その詳細については後で説明します):

julia> DateTime(2013)
2013-01-01T00:00:00

julia> DateTime(2013,7)
2013-07-01T00:00:00

julia> DateTime(2013,7,1)
2013-07-01T00:00:00

julia> DateTime(2013,7,1,12)
2013-07-01T12:00:00

julia> DateTime(2013,7,1,12,30)
2013-07-01T12:30:00

julia> DateTime(2013,7,1,12,30,59)
2013-07-01T12:30:59

julia> DateTime(2013,7,1,12,30,59,1)
2013-07-01T12:30:59.001

julia> Date(2013)
2013-01-01

julia> Date(2013,7)
2013-07-01

julia> Date(2013,7,1)
2013-07-01

julia> Date(Dates.Year(2013),Dates.Month(7),Dates.Day(1))
2013-07-01

julia> Date(Dates.Month(7),Dates.Year(2013))
2013-07-01

Date または DateTime の解析は、フォーマット文字列を使用して行われます。フォーマット文字列は、解析するための期間を含む 区切られた または 固定幅 の「スロット」を定義するという概念によって機能し、解析するテキストとフォーマット文字列を 4d61726b646f776e2e436f64652822222c2022446174652229_40726566 または 4d61726b646f776e2e436f64652822222c20224461746554696d652229_40726566 コンストラクタに渡します。形式は Date("2015-01-01",dateformat"y-m-d") または DateTime("20150101",dateformat"yyyymmdd") です。

区切りスロットは、2つの連続する期間の間にパーサーが期待する区切り文字を指定することでマークされます。したがって、"y-m-d"は、日付文字列"2014-07-16"の最初と2番目のスロットの間に-文字があることをパーサーに知らせます。ym、およびd文字は、各スロットでどの期間を解析するかをパーサーに知らせます。

上記のコンストラクタの例 Date(2013) のように、区切られた DateFormat は、前の部分が与えられている限り、日付や時間の欠落した部分を許可します。他の部分には通常のデフォルト値が与えられます。例えば、Date("1981-03", dateformat"y-m-d")1981-03-01 を返し、Date("31/12", dateformat"d/m/y")0001-12-31 を返します。(デフォルトの年は1年AD/CEです。)ただし、空の文字列は常に ArgumentError をスローします。

固定幅スロットは、幅に対応する回数だけピリオド文字を繰り返すことで指定され、文字の間に区切りはありません。したがって、dateformat"yyyymmdd"は、日付文字列のように"20140716"に対応します。パーサーは、区切りがないことによって固定幅スロットを区別し、1つのピリオド文字から次のピリオド文字への遷移"yyyymm"に注目します。

テキスト形式の月の解析は、略称とフルネームの月名にそれぞれ uU 文字を通じてサポートされています。デフォルトでは、英語の月名のみがサポートされているため、u は "Jan"、"Feb"、"Mar" などに対応します。そして U は "January"、"February"、"March" などに対応します。他の名前=>値マッピング関数 daynamemonthname と同様に、カスタムロケールは MONTHTOVALUEABBR および MONTHTOVALUE 辞書に略称とフルネームの月名のために locale=>Dict{String,Int} マッピングを渡すことでロードできます。

上記の例では、dateformat""文字列マクロが使用されました。このマクロは、マクロが展開されるときに一度DateFormatオブジェクトを作成し、コードスニペットが複数回実行されても同じDateFormatオブジェクトを使用します。

julia> for i = 1:10^5
           Date("2015-01-01", dateformat"y-m-d")
       end

または、DateFormatオブジェクトを明示的に作成することもできます:

julia> df = DateFormat("y-m-d");

julia> dt = Date("2015-01-01",df)
2015-01-01

julia> dt2 = Date("2015-01-02",df)
2015-01-02

代わりに、ブロードキャスティングを使用します:

julia> years = ["2015", "2016"];

julia> Date.(years, DateFormat("yyyy"))
2-element Vector{Date}:
 2015-01-01
 2016-01-01

便宜上、フォーマット文字列を直接渡すこともできます(例:Date("2015-01-01","y-m-d"))。ただし、この形式は、同じフォーマットを繰り返し解析する場合にパフォーマンスコストが発生します。なぜなら、内部的に毎回新しいDateFormatオブジェクトを作成するからです。

Date または DateTime は、コンストラクタを介してだけでなく、文字列からも構築できます。これは parse および tryparse 関数を使用して行うことができますが、オプションの第3引数として DateFormat 型のフォーマットを指定できます。例えば、parse(Date, "06.23.2013", dateformat"m.d.y") や、デフォルトフォーマットを使用する tryparse(DateTime, "1999-12-31T23:59:59") があります。これらの関数の顕著な違いは、4d61726b646f776e2e436f64652822222c202274727970617273652229_40726566 を使用する場合、文字列が空であるか無効なフォーマットである場合にエラーがスローされないことです。その代わりに nothing が返されます。

Julia 1.9

Julia 1.9以前は、空の文字列をコンストラクタやparseに渡してもエラーが発生せず、適切にDateTime(1)Date(1)、またはTime(0)が返されました。同様に、tryparsenothingを返しませんでした。

完全なパースおよびフォーマットのテストと例のスイートは、stdlib/Dates/test/io.jlで利用可能です。

Durations/Comparisons

Finding the length of time between two Date or DateTime is straightforward given their underlying representation as UTInstant{Day} and UTInstant{Millisecond}, respectively. The difference between Date is returned in the number of Day, and DateTime in the number of Millisecond. Similarly, comparing TimeType is a simple matter of comparing the underlying machine instants (which in turn compares the internal Int64 values).

julia> dt = Date(2012,2,29)
2012-02-29

julia> dt2 = Date(2000,2,1)
2000-02-01

julia> dump(dt)
Date
  instant: Dates.UTInstant{Day}
    periods: Day
      value: Int64 734562

julia> dump(dt2)
Date
  instant: Dates.UTInstant{Day}
    periods: Day
      value: Int64 730151

julia> dt > dt2
true

julia> dt != dt2
true

julia> dt + dt2
ERROR: MethodError: no method matching +(::Date, ::Date)
[...]

julia> dt * dt2
ERROR: MethodError: no method matching *(::Date, ::Date)
[...]

julia> dt / dt2
ERROR: MethodError: no method matching /(::Date, ::Date)

julia> dt - dt2
4411 days

julia> dt2 - dt
-4411 days

julia> dt = DateTime(2012,2,29)
2012-02-29T00:00:00

julia> dt2 = DateTime(2000,2,1)
2000-02-01T00:00:00

julia> dt - dt2
381110400000 milliseconds

Accessor Functions

Date および DateTime タイプは、単一の Int64 値として保存されているため、日付の部分やフィールドはアクセサ関数を通じて取得できます。小文字のアクセサはフィールドを整数として返します:

julia> t = Date(2014, 1, 31)
2014-01-31

julia> Dates.year(t)
2014

julia> Dates.month(t)
1

julia> Dates.week(t)
5

julia> Dates.day(t)
31

適切な大文字小文字を使用して、対応する Period タイプで同じ値を返します:

julia> Dates.Year(t)
2014 years

julia> Dates.Day(t)
31 days

複合メソッドが提供されているのは、個別にアクセスするよりも同時に複数のフィールドにアクセスする方が効率的だからです:

julia> Dates.yearmonth(t)
(2014, 1)

julia> Dates.monthday(t)
(1, 31)

julia> Dates.yearmonthday(t)
(2014, 1, 31)

基礎となる UTInstant または整数値にもアクセスできます:

julia> dump(t)
Date
  instant: Dates.UTInstant{Day}
    periods: Day
      value: Int64 735264

julia> t.instant
Dates.UTInstant{Day}(Day(735264))

julia> Dates.value(t)
735264

Query Functions

クエリ関数は、TimeType に関するカレンダー情報を提供します。これには、曜日に関する情報が含まれています:

julia> t = Date(2014, 1, 31)
2014-01-31

julia> Dates.dayofweek(t)
5

julia> Dates.dayname(t)
"Friday"

julia> Dates.dayofweekofmonth(t) # 5th Friday of January
5

年の月:

julia> Dates.monthname(t)
"January"

julia> Dates.daysinmonth(t)
31

TimeTypeの年と四半期に関する情報:

julia> Dates.isleapyear(t)
false

julia> Dates.dayofyear(t)
31

julia> Dates.quarterofyear(t)
1

julia> Dates.dayofquarter(t)
31

dayname および monthname メソッドは、他の言語/ロケールのために曜日や月の名前を返すために使用できるオプションの locale キーワードを取ることもできます。これらの関数には、省略形の名前を返すバージョンもあり、具体的には dayabbr および monthabbr です。まず、マッピングが LOCALES 変数にロードされます:

julia> french_months = ["janvier", "février", "mars", "avril", "mai", "juin",
                        "juillet", "août", "septembre", "octobre", "novembre", "décembre"];

julia> french_months_abbrev = ["janv","févr","mars","avril","mai","juin",
                              "juil","août","sept","oct","nov","déc"];

julia> french_days = ["lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche"];

julia> Dates.LOCALES["french"] = Dates.DateLocale(french_months, french_months_abbrev, french_days, [""]);

上記の関数は、クエリを実行するために使用できます:

julia> Dates.dayname(t;locale="french")
"vendredi"

julia> Dates.monthname(t;locale="french")
"janvier"

julia> Dates.monthabbr(t;locale="french")
"janv"

省略形の曜日が読み込まれていないため、関数 dayabbr を使用しようとするとエラーが発生します。

julia> Dates.dayabbr(t;locale="french")
ERROR: BoundsError: attempt to access 1-element Vector{String} at index [5]
Stacktrace:
[...]

TimeType-Period Arithmetic

どの言語/日付フレームワークを使用する場合でも、日付期間の算術がどのように処理されるかに精通していることは良い習慣です。なぜなら、いくつかの tricky issues に対処する必要があるからです(ただし、日精度のタイプについてははるかに少ないですが)。

Dates モジュールのアプローチは、Period 算術を行う際に、できるだけ少ない変更を試みるというシンプルな原則に従おうとします。このアプローチは、カレンダー 算術としても知られており、誰かが会話の中で同じ計算を尋ねた場合にあなたが推測するであろうことです。なぜこれほどの騒ぎがあるのでしょうか?クラシックな例を見てみましょう:2014年1月31日に1か月を加えます。答えは何でしょうか?Javascriptは March 3 (31日を仮定)と言います。PHPは March 2 (30日を仮定)と言います。実際のところ、正しい答えはありません。Dates モジュールでは、結果として2月28日を返します。どのようにそれを計算するのでしょうか?カジノのクラシックな7-7-7ギャンブルゲームを考えてみてください。

今、7-7-7の代わりに、スロットが年-月-日になっていると想像してみてください。私たちの例では、2014-01-31です。この日付に1か月を追加するように頼むと、月のスロットが増加し、2014-02-31になります。次に、日付が新しい月の有効な最終日より大きいかどうかがチェックされます。もしそうであれば(上記のケースのように)、日付は有効な最終日(28)に調整されます。このアプローチの影響は何でしょうか?日付にもう1か月を追加してみましょう。2014-02-28 + Month(1) == 2014-03-28。え?3月の最終日を期待していましたか?いいえ、申し訳ありませんが、7-7-7のスロットを思い出してください。できるだけ少ないスロットが変更されるので、まず月のスロットを1増やして2014-03-28にし、これで完了です。これは有効な日付です。一方、元の日時2014-01-31に2か月を追加すると、予想通り2014-03-31になります。このアプローチのもう一つの影響は、特定の順序が強制されると結合性が失われることです(つまり、異なる順序で追加すると異なる結果になります)。例えば:

julia> (Date(2014,1,29)+Dates.Day(1)) + Dates.Month(1)
2014-02-28

julia> (Date(2014,1,29)+Dates.Month(1)) + Dates.Day(1)
2014-03-01

何が起こっているのでしょうか?最初の行では、1日を1月29日に加算しており、その結果は2014-01-30です。次に1か月を加算すると、2014-02-30になり、これが2014-02-28に調整されます。2番目の例では、最初に1か月を加算し、2014-02-29になり、これが2014-02-28に調整され、その後1日を加算すると2014-03-01になります。この場合に役立つ設計原則の1つは、複数の期間が存在する場合、操作は期間のタイプによって順序付けられ、値や位置の順序ではないということです。つまり、Yearが最初に加算され、その後にMonthWeekなどが続きます。したがって、以下の結合性を持ち、うまく機能します:

julia> Date(2014,1,29) + Dates.Day(1) + Dates.Month(1)
2014-03-01

julia> Date(2014,1,29) + Dates.Month(1) + Dates.Day(1)
2014-03-01

トリッキーですか?おそらく。無邪気な Dates ユーザーは何をすべきでしょうか?要するに、月を扱う際に特定の結合性を明示的に強制することは、予期しない結果を招く可能性があることを認識しておくべきですが、それ以外はすべて期待通りに動作するはずです。幸いなことに、UTでの時間を扱う日付期間の算術における奇妙なケースはこれがほとんど全てです(夏時間、うるう秒などの「喜び」を避けるために)。

ボーナスとして、すべての期間算術オブジェクトは範囲と直接連携します:

julia> dr = Date(2014,1,29):Day(1):Date(2014,2,3)
Date("2014-01-29"):Day(1):Date("2014-02-03")

julia> collect(dr)
6-element Vector{Date}:
 2014-01-29
 2014-01-30
 2014-01-31
 2014-02-01
 2014-02-02
 2014-02-03

julia> dr = Date(2014,1,29):Dates.Month(1):Date(2014,07,29)
Date("2014-01-29"):Month(1):Date("2014-07-29")

julia> collect(dr)
7-element Vector{Date}:
 2014-01-29
 2014-02-28
 2014-03-29
 2014-04-29
 2014-05-29
 2014-06-29
 2014-07-29

Adjuster Functions

日付の期間算術が便利である一方で、日付に必要な計算の種類は、固定された期間の数よりもカレンダー的または時間的な性質を持つことがよくあります。祝日はその完璧な例です。ほとんどの祝日は「メモリアルデー = 5月の最後の月曜日」や「感謝祭 = 11月の第4木曜日」といったルールに従います。このような時間的表現は、月の最初または最後、次の火曜日、または最初と第3の水曜日など、カレンダーに対するルールを扱います。

Dates モジュールは、時間的ルールを簡潔に表現するのに役立つ便利なメソッドを通じて adjuster API を提供します。最初のグループの adjuster メソッドは、週、月、四半期、年の最初と最後に関するものです。それぞれは単一の TimeType を入力として受け取り、入力に対して希望する期間の最初または最後に 調整 します。

julia> Dates.firstdayofweek(Date(2014,7,16)) # Adjusts the input to the Monday of the input's week
2014-07-14

julia> Dates.lastdayofmonth(Date(2014,7,16)) # Adjusts to the last day of the input's month
2014-07-31

julia> Dates.lastdayofquarter(Date(2014,7,16)) # Adjusts to the last day of the input's quarter
2014-09-30

次の2つの高次のメソッド、tonexttoprev は、最初の引数として DateFunction を取り、開始 TimeType とともに、時間的表現を扱うことを一般化します。DateFunction は、通常は匿名の関数で、単一の 4d61726b646f776e2e436f64652822222c202254696d65547970652229_40726566 を入力として受け取り、Bool を返し、調整基準が満たされたことを示す true を返します。例えば:

julia> istuesday = x->Dates.dayofweek(x) == Dates.Tuesday; # Returns true if the day of the week of x is Tuesday

julia> Dates.tonext(istuesday, Date(2014,7,13)) # 2014-07-13 is a Sunday
2014-07-15

julia> Dates.tonext(Date(2014,7,13), Dates.Tuesday) # Convenience method provided for day of the week adjustments
2014-07-15

これは、より複雑な時間表現のためのdo-block構文で役立ちます:

julia> Dates.tonext(Date(2014,7,13)) do x
           # Return true on the 4th Thursday of November (Thanksgiving)
           Dates.dayofweek(x) == Dates.Thursday &&
           Dates.dayofweekofmonth(x) == 4 &&
           Dates.month(x) == Dates.November
       end
2014-11-27

Base.filter メソッドを使用すると、指定された範囲内のすべての有効な日付/時刻を取得できます:

# Pittsburgh street cleaning; Every 2nd Tuesday from April to November
# Date range from January 1st, 2014 to January 1st, 2015
julia> dr = Dates.Date(2014):Day(1):Dates.Date(2015);

julia> filter(dr) do x
           Dates.dayofweek(x) == Dates.Tue &&
           Dates.April <= Dates.month(x) <= Dates.Nov &&
           Dates.dayofweekofmonth(x) == 2
       end
8-element Vector{Date}:
 2014-04-08
 2014-05-13
 2014-06-10
 2014-07-08
 2014-08-12
 2014-09-09
 2014-10-14
 2014-11-11

追加の例とテストは stdlib/Dates/test/adjusters.jl で入手できます。

Period Types

期間は、人間が捉える離散的で時には不規則な時間の長さです。1か月を考えてみてください。それは、年や月の文脈に応じて、28、29、30、または31日の値を表すことがあります。また、1年は、うるう年の場合、365日または366日を表すことがあります。 Period タイプはシンプルな Int64 ラッパーであり、任意の Int64 変換可能タイプをラップすることによって構築されます。つまり、Year(1)Month(3.0) などです。同じタイプの 4d61726b646f776e2e436f64652822222c2022506572696f642229_40726566 同士の算術演算は整数のように振る舞い、制限された Period-Real 算術が利用可能です。基礎となる整数は Dates.value を使って抽出できます。

julia> y1 = Dates.Year(1)
1 year

julia> y2 = Dates.Year(2)
2 years

julia> y3 = Dates.Year(10)
10 years

julia> y1 + y2
3 years

julia> div(y3,y2)
5

julia> y3 - y2
8 years

julia> y3 % y2
0 years

julia> div(y3,3) # mirrors integer division
3 years

julia> Dates.value(Dates.Millisecond(10))
10

整数倍ではない期間や持続時間を表現するには、Dates.CompoundPeriod 型を使用できます。複合期間は、単純な Period 型から手動で構築することができます。さらに、canonicalize 関数を使用して、期間を 4d61726b646f776e2e436f64652822222c202244617465732e436f6d706f756e64506572696f642229_40726566 に分解することができます。これは、2つの DateTime の差などの持続時間を、より便利な表現に変換するのに特に役立ちます。

julia> cp = Dates.CompoundPeriod(Day(1),Minute(1))
1 day, 1 minute

julia> t1 = DateTime(2018,8,8,16,58,00)
2018-08-08T16:58:00

julia> t2 = DateTime(2021,6,23,10,00,00)
2021-06-23T10:00:00

julia> canonicalize(t2-t1) # creates a CompoundPeriod
149 weeks, 6 days, 17 hours, 2 minutes

Rounding

Date および DateTime の値は、指定された解像度(例:1ヶ月または15分)に丸めることができます floorceil、または round

julia> floor(Date(1985, 8, 16), Dates.Month)
1985-08-01

julia> ceil(DateTime(2013, 2, 13, 0, 31, 20), Dates.Minute(15))
2013-02-13T00:45:00

julia> round(DateTime(2016, 8, 6, 20, 15), Dates.Day)
2016-08-07T00:00:00

数値 round メソッドとは異なり、デフォルトで偶数に向かって引き分けを行うこのメソッドは、TimeType4d61726b646f776e2e436f64652822222c2022726f756e642229_40726566RoundNearestTiesUp 丸めモードを使用します。引き分けを最も近い「偶数」にすることが何を意味するのかを推測するのは難しいです。利用可能な RoundingMode についての詳細は、API reference で確認できます。

丸めは一般的に期待通りに動作するべきですが、期待される動作が明らかでないいくつかのケースがあります。

Rounding Epoch

多くの場合、丸めのために指定された解像度(例:Dates.Second(30))は、次に大きい期間(この場合はDates.Minute(1))に均等に分割されます。しかし、これが当てはまらない場合の丸めの挙動は混乱を招く可能性があります。DateTimeを最も近い10時間に丸めた場合の期待される結果は何ですか?

julia> round(DateTime(2016, 7, 17, 11, 55), Dates.Hour(10))
2016-07-17T12:00:00

それは混乱を招くかもしれませんが、時間(12)は10で割り切れません。2016-07-17T12:00:00が選ばれた理由は、0000-01-01T00:00:00から17,676,660時間後であり、17,676,660は10で割り切れるからです。

Julia DateDateTime の値は ISO 8601 標準に従って表現されており、日数(およびミリ秒)の計算に使用される丸め計算の開始点として、0000-01-01T00:00:00 が基準(または「丸めエポック」)として選ばれました。(これは、Julia の内部表現 4d61726b646f776e2e436f64652822222c2022446174652229_40726566Rata Die notation を使用しているのとは若干異なることに注意してください。しかし、ISO 8601 標準はエンドユーザーに最も見えるため、混乱を最小限に抑えるために内部で使用される 0000-12-31T00:00:00 の代わりに 0000-01-01T00:00:00 が丸めエポックとして選ばれました。)

0000-01-01T00:00:00を丸めの基準点として使用する唯一の例外は、週に丸める場合です。最も近い週に丸めると、常に月曜日(ISO 8601で指定された週の最初の日)が返されます。このため、週数に丸める際の基準として、0000-01-03T00:00:00(ISO 8601で定義された年0000の最初の週の最初の日)を使用します。

ここに、期待される動作が必ずしも明らかでない関連するケースがあります:P(2) に最も近い値に丸めるとどうなりますか?ここで PPeriod 型です。いくつかのケース(具体的には、P <: Dates.TimePeriod の場合)では、答えは明確です:

julia> round(DateTime(2016, 7, 17, 8, 55, 30), Dates.Hour(2))
2016-07-17T08:00:00

julia> round(DateTime(2016, 7, 17, 8, 55, 30), Dates.Minute(2))
2016-07-17T08:56:00

これは明らかに思えます。なぜなら、これらの期間のそれぞれの2つは次の大きな順序の期間に均等に分割されるからです。しかし、2か月の場合(これはまだ1年に均等に分割されます)、答えは驚くべきものかもしれません:

julia> round(DateTime(2016, 7, 17, 8, 55, 30), Dates.Month(2))
2016-07-01T00:00:00

なぜ7月の最初の日に丸めるのか、奇数の月であるにもかかわらず?鍵は、月が1から始まる(最初の月は1が割り当てられる)のに対し、時間、分、秒、ミリ秒は0から始まるということです。

これは、DateTimeを秒、分、時間、または年の偶数倍に丸めると(ISO 8601仕様には年ゼロが含まれているため)、そのフィールドに偶数の値を持つ4d61726b646f776e2e436f64652822222c20224461746554696d652229_40726566が得られることを意味します。一方、4d61726b646f776e2e436f64652822222c20224461746554696d652229_40726566を月の偶数倍に丸めると、月のフィールドには奇数の値が得られます。月と年の両方が不規則な日数を含む可能性があるため、偶数の日数に丸めると日数フィールドに偶数の値が得られるかどうかは不確かです。

Dates モジュールからエクスポートされたメソッドに関する追加情報は、 API reference を参照してください。

API reference

Dates and Time Types

Dates.PeriodType
期間
年
四半期
月
週
日
時間
分
秒
ミリ秒
マイクロ秒
ナノ秒

Period 型は、時間の離散的で人間の表現を表します。

source
Dates.CompoundPeriodType
CompoundPeriod

CompoundPeriodは、固定の小さな期間の倍数ではない時間の期間を表現するのに便利です。たとえば、「1年と1日」は固定の数の日ではありませんが、CompoundPeriodを使用して表現できます。実際、CompoundPeriodは異なる期間タイプの加算によって自動的に生成されます。たとえば、Year(1) + Day(1)CompoundPeriodの結果を生成します。

source
Dates.InstantType
Instant

Instant型は、エポックから始まる連続したタイムラインとしての時間の整数ベースの機械表現を表します。

source
Dates.UTInstantType
UTInstant{T}

UTInstantは、UT時間に基づく機械のタイムラインを表します(1日 = 地球の1回の回転)。Tは、インスタントの解像度または精度を示すPeriodパラメータです。

source
Dates.TimeTypeType
TimeType

TimeType タイプは、機械のインスタンスである Instant をラップして、人間が理解できる形で機械の瞬間を提供します。TimeDateTime、および DateTimeType のサブタイプです。

source
Dates.DateTimeType
DateTime

DateTimeは、先行グレゴリオ暦に従った時点を表します。時間の最小解像度はミリ秒です(すなわち、マイクロ秒やナノ秒はこの型では表現できません)。この型は固定小数点演算をサポートしているため、アンダーフロー(およびオーバーフロー)を起こす可能性があります。注目すべき結果は、MicrosecondNanosecondを加算する際の丸めです:

julia> dt = DateTime(2023, 8, 19, 17, 45, 32, 900)
2023-08-19T17:45:32.900

julia> dt + Millisecond(1)
2023-08-19T17:45:32.901

julia> dt + Microsecond(1000) # 1000us == 1ms
2023-08-19T17:45:32.901

julia> dt + Microsecond(999) # 999us rounded to 1000us
2023-08-19T17:45:32.901

julia> dt + Microsecond(1499) # 1499 rounded to 1000us
2023-08-19T17:45:32.901
source
Dates.DateType
Date

DateUTInstant{Day}をラップし、先行グレゴリオ暦に従って解釈します。

source
Dates.TimeType
Time

TimeNanosecondをラップし、24時間の1日の特定の瞬間を表します。

source
Dates.TimeZoneType
TimeZone

経度に基づいて特定の場所での時間を決定する地理的ゾーン。いくつかのタイムゾーンは夏時間を観測します(例:EST -> EDT)。実装やさらなるサポートについては、TimeZones.jl パッケージを参照してください。

source
Dates.UTCType
UTC

UTC(協定世界時)は、すべての他の時間が測定されるTimeZoneです。これは、0°経度の時間に関連付けられています。夏時間の調整は行われません。

source

Dates Functions

Dates.DateTimeMethod
DateTime(y, [m, d, h, mi, s, ms]) -> DateTime

部分から DateTime 型を構築します。引数は Int64 に変換可能でなければなりません。

source
Dates.DateTimeMethod
DateTime(periods::Period...) -> DateTime

Period型の部分からDateTime型を構築します。引数は任意の順序で指定できます。提供されていないDateTimeの部分はDates.default(period)の値にデフォルト設定されます。

source
Dates.DateTimeMethod
DateTime(f::Function, y[, m, d, h, mi, s]; step=Day(1), limit=10000) -> DateTime

調整者APIを通じてDateTimeを作成します。出発点は提供されたy, m, d...引数から構築され、f::Functiontrueを返すまで調整されます。調整のステップサイズはstepキーワードを通じて手動で提供できます。limitは、f::Functionが満たされない場合にエラーをスローする前に調整APIが追求する最大反復回数の制限を提供します。

julia> DateTime(dt -> second(dt) == 40, 2010, 10, 20, 10; step = Second(1))
2010-10-20T10:00:40

julia> DateTime(dt -> hour(dt) == 20, 2010, 10, 20, 10; step = Hour(1), limit = 5)
ERROR: ArgumentError: Adjustment limit reached: 5 iterations
Stacktrace:
[...]
source
Dates.DateTimeMethod
DateTime(dt::Date) -> DateTime

DateDateTimeに変換します。新しいDateTimeの時間、分、秒、およびミリ秒の部分はゼロであると仮定されます。

source
Dates.DateTimeMethod
DateTime(dt::AbstractString, format::AbstractString; locale="english") -> DateTime

dt 日付時刻文字列を format 文字列で指定されたパターンに従って解析することで DateTime を構築します(構文については DateFormat を参照してください)。

Note

このメソッドは呼び出されるたびに DateFormat オブジェクトを作成します。同じフォーマットを繰り返し使用する際のパフォーマンス低下を避けるために、代わりに DateFormat オブジェクトを作成し、それを第二引数として使用することをお勧めします。

julia> DateTime("2020-01-01", "yyyy-mm-dd")
2020-01-01T00:00:00

julia> a = ("2020-01-01", "2020-01-02");

julia> [DateTime(d, dateformat"yyyy-mm-dd") for d ∈ a] # preferred
2-element Vector{DateTime}:
 2020-01-01T00:00:00
 2020-01-02T00:00:00
source
Dates.formatMethod
format(dt::TimeType, format::AbstractString; locale="english") -> AbstractString

TimeTypeオブジェクトを使用して文字列を構築し、提供されたformatを適用します。次の文字コードを使用してformat文字列を構築できます:

コードコメント
y6固定幅の数値年
Y1996最小幅の数値年
m1, 12最小幅の数値月
uJanlocaleに応じて3文字に短縮された月名
UJanuarylocaleキーワードに応じた完全な月名
d1, 31最小幅の月の日
H0, 23最小幅の時間(24時間制)
M0, 59最小幅の分
S0, 59最小幅の秒
s000, 500最小幅3のミリ秒
eMon, Tue短縮された曜日
EMonday完全な曜日名

連続するコード文字の数は、コードの幅を示します。yyyy-mmの形式は、コードyが幅4、mが幅2であることを指定します。数値を生成するコードには、固定幅または最小幅の関連モードがあります。固定幅モードは、指定された幅より短い場合に値をゼロで左詰めし、長い場合は値を切り捨てます。最小幅モードは、幅より長い値を切り捨てない点を除いて、固定幅と同じように機能します。

formatを作成する際には、任意の非コード文字を区切り文字として使用できます。たとえば、文字列"1996-01-15T00:00:00"を生成するには、formatとして"yyyy-mm-ddTHH:MM:SS"を使用できます。コード文字をリテラルとして使用する必要がある場合は、エスケープ文字のバックスラッシュを使用できます。文字列"1996y01m"は、フォーマットraw"yyyy\ymm\m"で生成できます。

source
Dates.DateFormatType
DateFormat(format::AbstractString, locale="english") -> DateFormat

日付文字列を解析したり、日付オブジェクトを文字列としてフォーマットするために使用できる日付フォーマットオブジェクトを構築します。次の文字コードを使用して format 文字列を構築できます:

コード一致するコメント
Y1996, 961996年、0096年を返します
y1996, 96parseでは Y と同じですが、formatでは余分な桁を破棄します
m1, 011桁または2桁の月に一致します
uJanlocaleキーワードに従った省略形の月に一致します
UJanuarylocaleキーワードに従った完全な月名に一致します
d1, 011桁または2桁の日に一致します
H00時間(24時間制)に一致します
I0012時間制で時間を出力するためのもの
M00分に一致します
S00秒に一致します
s.500ミリ秒に一致します
eMon, Tues週の省略形の日に一致します
EMonday週の完全な名前の日に一致します
pAMAM/PM(大文字小文字を区別しない)に一致します
yyyymmdd19960101固定幅の年、月、日と一致します

上記にリストされていない文字は、通常、日付と時間のスロットの間の区切り文字として扱われます。たとえば、"1996-01-15T00:00:00.0"という dt 文字列は、"y-m-dTH:M:S.s"のような format 文字列を持ちます。区切り文字としてコード文字を使用する必要がある場合は、バックスラッシュを使用してエスケープできます。日付 "1995y01m" は "y\ym\m" というフォーマットになります。

12:00AMは00:00(真夜中)に対応し、12:00PMは12:00(正午)に対応します。p 指定子を使用して時間を解析する場合、任意の時間(HまたはI)は12時間制として解釈されるため、I コードは主に出力に役立ちます。

DateFormatオブジェクトの作成は高コストです。可能な限り、一度作成して何度も使用するか、dateformat""文字列マクロを試してください。このマクロを使用すると、マクロ展開時に一度DateFormatオブジェクトが作成され、後で再利用されます。また、後でリストされるいくつかの事前定義されたフォーマッタもあります。

DateTimeおよびformatを参照して、DateFormatオブジェクトを使用して日付文字列を解析および書き込む方法を確認してください。

source
Dates.@dateformat_strMacro
dateformat"Y-m-d H:M:S"

DateFormat オブジェクトを作成します。DateFormat("Y-m-d H:M:S") に似ていますが、マクロ展開中に一度だけ DateFormat オブジェクトを作成します。

フォーマット指定子の詳細については、DateFormat を参照してください。

source
Dates.DateTimeMethod
DateTime(dt::AbstractString, df::DateFormat=ISODateTimeFormat) -> DateTime

dt 日付時刻文字列を DateFormat オブジェクトで指定されたパターンに従って解析することによって DateTime を構築します。省略した場合は dateformat"yyyy-mm-dd\THH:MM:SS.s" が使用されます。

DateTime(::AbstractString, ::AbstractString) と似ていますが、事前に作成された DateFormat オブジェクトを使用することで、同様の形式の日時文字列を繰り返し解析する際により効率的です。

source
Dates.DateMethod
Date(y, [m, d]) -> Date

部分から Date 型を構築します。引数は Int64 に変換可能でなければなりません。

source
Dates.DateMethod
Date(period::Period...) -> Date

Period型の部分からDate型を構築します。引数は任意の順序で指定できます。提供されていないDateの部分はDates.default(period)の値にデフォルト設定されます。

source
Dates.DateMethod
Date(f::Function, y[, m, d]; step=Day(1), limit=10000) -> Date

調整者APIを通じてDateを作成します。出発点は提供されたy, m, d引数から構築され、f::Functiontrueを返すまで調整されます。調整のステップサイズはstepキーワードを通じて手動で提供できます。limitは、f::Functionが決して満たされない場合に、調整APIがエラーを投げる前に追求する最大反復回数の制限を提供します。

julia> Date(date -> week(date) == 20, 2010, 01, 01)
2010-05-17

julia> Date(date -> year(date) == 2010, 2000, 01, 01)
2010-01-01

julia> Date(date -> month(date) == 10, 2000, 01, 01; limit = 5)
ERROR: ArgumentError: Adjustment limit reached: 5 iterations
Stacktrace:
[...]
source
Dates.DateMethod
Date(dt::DateTime) -> Date

DateTimeDateに変換します。DateTimeの時間、分、秒、およびミリ秒の部分は切り捨てられ、年、月、日だけが構築に使用されます。

source
Dates.DateMethod
Date(d::AbstractString, format::AbstractString; locale="english") -> Date

format文字列で指定されたパターンに従って、d日付文字列を解析することによってDateを構築します(構文についてはDateFormatを参照してください)。

Note

このメソッドは呼び出されるたびにDateFormatオブジェクトを作成します。同じフォーマットを繰り返し使用する際のパフォーマンス低下を避けるために、代わりにDateFormatオブジェクトを作成し、それを第二引数として使用することをお勧めします。

julia> Date("2020-01-01", "yyyy-mm-dd")
2020-01-01

julia> a = ("2020-01-01", "2020-01-02");

julia> [Date(d, dateformat"yyyy-mm-dd") for d ∈ a] # preferred
2-element Vector{Date}:
 2020-01-01
 2020-01-02
source
Dates.DateMethod
Date(d::AbstractString, df::DateFormat=ISODateFormat) -> Date

d 日付文字列を DateFormat オブジェクトで指定されたパターンに従って解析することによって Date を構築します。省略した場合は dateformat"yyyy-mm-dd" になります。

Date(::AbstractString, ::AbstractString) に似ていますが、事前に作成された DateFormat オブジェクトを使用して、同様の形式の日時文字列を繰り返し解析する際により効率的です。

source
Dates.TimeMethod
Time(h, [mi, s, ms, us, ns]) -> Time

部分から Time 型を構築します。引数は Int64 に変換可能でなければなりません。

source
Dates.TimeMethod
Time(period::TimePeriod...) -> Time

Period 型の部分から Time 型を構築します。引数は任意の順序で指定できます。提供されていない Time 部分は Dates.default(period) の値にデフォルト設定されます。

source
Dates.TimeMethod
Time(f::Function, h, mi=0; step::Period=Second(1), limit::Int=10000)
Time(f::Function, h, mi, s; step::Period=Millisecond(1), limit::Int=10000)
Time(f::Function, h, mi, s, ms; step::Period=Microsecond(1), limit::Int=10000)
Time(f::Function, h, mi, s, ms, us; step::Period=Nanosecond(1), limit::Int=10000)

Timeを調整APIを通じて作成します。出発点は提供されたh, mi, s, ms, us引数から構築され、f::Functiontrueを返すまで調整されます。調整のステップサイズはstepキーワードを通じて手動で提供できます。limitは、調整APIがエラーを投げる前に追求する最大反復回数の制限を提供します(f::Functionが決して満たされない場合)。デフォルトのステップは、与えられた引数に対してより高い精度を許可するように調整されることに注意してください。つまり、時間、分、秒の引数が提供される場合、デフォルトのステップはSecond(1)の代わりにMillisecond(1)になります。

julia> Time(t -> minute(t) == 30, 20)
20:30:00

julia> Time(t -> minute(t) == 0, 20)
20:00:00

julia> Time(t -> hour(t) == 10, 3; limit = 5)
ERROR: ArgumentError: Adjustment limit reached: 5 iterations
Stacktrace:
[...]
source
Dates.TimeMethod
Time(dt::DateTime) -> Time

DateTimeTimeに変換します。DateTimeの時間、分、秒、およびミリ秒の部分が新しいTimeを作成するために使用されます。マイクロ秒とナノ秒はデフォルトでゼロです。

source
Dates.TimeMethod
Time(t::AbstractString, format::AbstractString; locale="english") -> Time

t 時間文字列を format 文字列で指定されたパターンに従って解析することで Time を構築します(構文については DateFormat を参照してください)。

Note

このメソッドは呼び出されるたびに DateFormat オブジェクトを作成します。同じフォーマットを繰り返し使用する際のパフォーマンス低下を避けるために、代わりに DateFormat オブジェクトを作成し、それを第二引数として使用することをお勧めします。

julia> Time("12:34pm", "HH:MMp")
12:34:00

julia> a = ("12:34pm", "2:34am");

julia> [Time(d, dateformat"HH:MMp") for d ∈ a] # preferred
2-element Vector{Time}:
 12:34:00
 02:34:00
source
Dates.TimeMethod
Time(t::AbstractString, df::DateFormat=ISOTimeFormat) -> Time

Timeを構築するには、DateFormatオブジェクトで指定されたパターンに従ってt日付時刻文字列を解析します。省略した場合は、dateformat"HH:MM:SS.s"が使用されます。

Time(::AbstractString, ::AbstractString)に似ていますが、事前に作成されたDateFormatオブジェクトを使用して、同様の形式の時刻文字列を繰り返し解析する際により効率的です。

source
Dates.nowMethod
now() -> DateTime

ユーザーのシステム時間に対応する DateTime を返し、システムのタイムゾーンロケールを含みます。

source
Dates.nowMethod
now(::Type{UTC}) -> DateTime

ユーザーのシステム時間に対応する DateTime をUTC/GMTとして返します。他のタイムゾーンについては、TimeZones.jlパッケージを参照してください。

julia> now(UTC)
2023-01-04T10:52:24.864
source
Base.epsMethod
eps(::Type{DateTime}) -> ミリ秒
eps(::Type{Date}) -> 日
eps(::Type{Time}) -> ナノ秒
eps(::TimeType) -> 期間

TimeTypeによってサポートされる最小単位の値を返します。

julia> eps(DateTime)
1 ミリ秒

julia> eps(Date)
1 日

julia> eps(Time)
1 ナノ秒
source

Accessor Functions

Dates.yearFunction
year(dt::TimeType) -> Int64

Date または DateTime の年を Int64 として返します。

source
Dates.monthFunction
month(dt::TimeType) -> Int64

Date または DateTime の月を Int64 として返します。

source
Dates.weekFunction
week(dt::TimeType) -> Int64

Date または DateTimeISO week dateInt64 として返します。年の最初の週は、その年の最初の木曜日を含む週であり、これにより1月4日以前の日付が前年の最後の週に含まれることがあります。例えば、week(Date(2005, 1, 1)) は2004年の53週目です。

julia> week(Date(1989, 6, 22))
25

julia> week(Date(2005, 1, 1))
53

julia> week(Date(2004, 12, 31))
53
source
Dates.dayFunction
day(dt::TimeType) -> Int64

Date または DateTime の月の日を Int64 として返します。

source
Dates.hourFunction
hour(dt::DateTime) -> Int64

DateTimeの時刻をInt64として返します。

source
hour(t::Time) -> Int64

Timeの時間をInt64として返します。

source
Dates.minuteFunction
minute(dt::DateTime) -> Int64

DateTimeの分をInt64として返します。

source
minute(t::Time) -> Int64

Timeの分をInt64として返します。

source
Dates.secondFunction
second(dt::DateTime) -> Int64

DateTimeの秒をInt64として返します。

source
second(t::Time) -> Int64

Timeの秒をInt64として返します。

source
Dates.millisecondFunction
millisecond(dt::DateTime) -> Int64

DateTimeのミリ秒をInt64として返します。

source
millisecond(t::Time) -> Int64

Timeのミリ秒をInt64として返します。

source
Dates.YearMethod
Year(v)

与えられた v 値を使用して Year オブジェクトを構築します。入力は Int64 に損失なく変換可能でなければなりません。

source
Dates.MonthMethod
Month(v)

与えられた v 値を使用して Month オブジェクトを構築します。入力は Int64 に損失なく変換可能でなければなりません。

source
Dates.WeekMethod
Week(v)

与えられた v 値を持つ Week オブジェクトを構築します。入力は Int64 に損失なく変換可能でなければなりません。

source
Dates.DayMethod
Day(v)

与えられた v 値を持つ Day オブジェクトを構築します。入力は Int64 に損失なく変換可能でなければなりません。

source
Dates.HourMethod
Hour(dt::DateTime) -> Hour

DateTimeの時間部分をHourとして返します。

source
Dates.MinuteMethod
Minute(dt::DateTime) -> Minute

DateTimeの分の部分をMinuteとして返します。

source
Dates.SecondMethod
Second(dt::DateTime) -> Second

DateTimeの秒の部分をSecondとして返します。

source
Dates.MillisecondMethod
Millisecond(dt::DateTime) -> Millisecond

DateTimeのミリ秒部分をMillisecondとして返します。

source
Dates.MicrosecondMethod
Microsecond(dt::Time) -> Microsecond

Timeのマイクロ秒部分をMicrosecondとして返します。

source
Dates.NanosecondMethod
Nanosecond(dt::Time) -> Nanosecond

Timeのナノ秒部分をNanosecondとして返します。

source
Dates.yearmonthFunction
yearmonth(dt::TimeType) -> (Int64, Int64)

Date または DateTime の年と月の部分を同時に返します。

source
Dates.monthdayFunction
monthday(dt::TimeType) -> (Int64, Int64)

DateまたはDateTimeの月と日部分を同時に返します。

source
Dates.yearmonthdayFunction
yearmonthday(dt::TimeType) -> (Int64, Int64, Int64)

Date または DateTime の年、月、日部分を同時に返します。

source

Query Functions

Dates.daynameFunction
dayname(dt::TimeType; locale="english") -> String
dayname(day::Integer; locale="english") -> String

指定されたlocaleDateまたはDateTimeの曜日に対応する完全な曜日名を返します。Integerも受け付けます。

julia> dayname(Date("2000-01-01"))
"Saturday"

julia> dayname(4)
"Thursday"
source
Dates.dayabbrFunction
dayabbr(dt::TimeType; locale="english") -> String
dayabbr(day::Integer; locale="english") -> String

指定されたlocaleにおけるDateまたはDateTimeの曜日に対応する省略名を返します。Integerも受け付けます。

julia> dayabbr(Date("2000-01-01"))
"Sat"

julia> dayabbr(3)
"Wed"
source
Dates.dayofweekFunction
dayofweek(dt::TimeType) -> Int64

曜日をInt64として返します。1 = 月曜日, 2 = 火曜日, など。

julia> dayofweek(Date("2000-01-01"))
6
source
Dates.dayofmonthFunction
dayofmonth(dt::TimeType) -> Int64

Date または DateTime の月の日を Int64 として返します。

source
Dates.dayofweekofmonthFunction
dayofweekofmonth(dt::TimeType) -> Int

dtの曜日に対して、その月の中で何番目であるかを返します。したがって、dtの曜日が月曜日であれば、1 = 月の第一月曜日、2 = 月の第二月曜日、などとなります。範囲は1:5です。

julia> dayofweekofmonth(Date("2000-02-01"))
1

julia> dayofweekofmonth(Date("2000-02-08"))
2

julia> dayofweekofmonth(Date("2000-02-15"))
3
source
Dates.daysofweekinmonthFunction
daysofweekinmonth(dt::TimeType) -> Int

dtの曜日に対して、その月におけるその曜日の合計数を返します。4または5を返します。月の最終週の日を指定するために、調整関数にdayofweekofmonth(dt) == daysofweekinmonth(dt)を含めることで、時間的表現で便利です。

julia> daysofweekinmonth(Date("2005-01-01"))
5

julia> daysofweekinmonth(Date("2005-01-04"))
4
source
Dates.monthnameFunction
monthname(dt::TimeType; locale="english") -> String
monthname(month::Integer, locale="english") -> String

指定されたlocaleDateまたはDateTimeまたはIntegerの月のフルネームを返します。

julia> monthname(Date("2005-01-04"))
"January"

julia> monthname(2)
"February"
source
Dates.monthabbrFunction
monthabbr(dt::TimeType; locale="english") -> String
monthabbr(month::Integer, locale="english") -> String

指定されたlocaleでのDateまたはDateTimeまたはIntegerの省略形の月名を返します。

julia> monthabbr(Date("2005-01-04"))
"Jan"

julia> monthabbr(2)
"Feb"
source
Dates.daysinmonthFunction
daysinmonth(dt::TimeType) -> Int

dtの月の日数を返します。値は28、29、30、または31になります。

julia> daysinmonth(Date("2000-01"))
31

julia> daysinmonth(Date("2001-02"))
28

julia> daysinmonth(Date("2000-02"))
29
source
Dates.isleapyearFunction
isleapyear(dt::TimeType) -> Bool

dtの年がうるう年であればtrueを返します。

julia> isleapyear(Date("2004"))
true

julia> isleapyear(Date("2005"))
false
source
Dates.dayofyearFunction
dayofyear(dt::TimeType) -> Int

dtの年の日を返します。1月1日が1日目です。

source
Dates.daysinyearFunction
daysinyear(dt::TimeType) -> Int

dtの年がうるう年であれば366を返し、そうでなければ365を返します。

julia> daysinyear(1999)
365

julia> daysinyear(2000)
366
source
Dates.quarterofyearFunction
quarterofyear(dt::TimeType) -> Int

dt が属する四半期を返します。値の範囲は 1:4 です。

source
Dates.dayofquarterFunction
dayofquarter(dt::TimeType) -> Int

dtの現在の四半期の日を返します。値の範囲は1:92です。

source

Adjuster Functions

Base.truncMethod
trunc(dt::TimeType, ::Type{Period}) -> TimeType

dtの値を指定されたPeriod型に従って切り捨てます。

julia> trunc(DateTime("1996-01-01T12:30:00"), Day)
1996-01-01T00:00:00
source
Dates.firstdayofweekFunction
firstdayofweek(dt::TimeType) -> TimeType

dtをその週の月曜日に調整します。

julia> firstdayofweek(DateTime("1996-01-05T12:30:00"))
1996-01-01T00:00:00
source
Dates.lastdayofweekFunction
lastdayofweek(dt::TimeType) -> TimeType

dtをその週の日曜日に調整します。

julia> lastdayofweek(DateTime("1996-01-05T12:30:00"))
1996-01-07T00:00:00
source
Dates.firstdayofmonthFunction
firstdayofmonth(dt::TimeType) -> TimeType

dtをその月の初日に調整します。

julia> firstdayofmonth(DateTime("1996-05-20"))
1996-05-01T00:00:00
source
Dates.lastdayofmonthFunction
lastdayofmonth(dt::TimeType) -> TimeType

dtをその月の最終日に調整します。

julia> lastdayofmonth(DateTime("1996-05-20"))
1996-05-31T00:00:00
source
Dates.firstdayofyearFunction
firstdayofyear(dt::TimeType) -> TimeType

dtをその年の最初の日に調整します。

julia> firstdayofyear(DateTime("1996-05-20"))
1996-01-01T00:00:00
source
Dates.lastdayofyearFunction
lastdayofyear(dt::TimeType) -> TimeType

dtをその年の最終日に調整します。

julia> lastdayofyear(DateTime("1996-05-20"))
1996-12-31T00:00:00
source
Dates.firstdayofquarterFunction
firstdayofquarter(dt::TimeType) -> TimeType

dtをその四半期の初日に調整します。

julia> firstdayofquarter(DateTime("1996-05-20"))
1996-04-01T00:00:00

julia> firstdayofquarter(DateTime("1996-08-20"))
1996-07-01T00:00:00
source
Dates.lastdayofquarterFunction
lastdayofquarter(dt::TimeType) -> TimeType

dtをその四半期の最終日に調整します。

julia> lastdayofquarter(DateTime("1996-05-20"))
1996-06-30T00:00:00

julia> lastdayofquarter(DateTime("1996-08-20"))
1996-09-30T00:00:00
source
Dates.tonextMethod
tonext(dt::TimeType, dow::Int; same::Bool=false) -> TimeType

dtdowに対応する次の曜日に調整します。1 = 月曜日、2 = 火曜日、などsame=trueを設定すると、現在のdtが次のdowとして考慮され、調整が行われないようになります。

source
Dates.toprevMethod
toprev(dt::TimeType, dow::Int; same::Bool=false) -> TimeType

dtdowに対応する前の曜日に調整します。1 = 月曜日、2 = 火曜日、などsame=trueを設定すると、現在のdtが前のdowとして考慮され、調整が行われないようになります。

source
Dates.tofirstFunction
tofirst(dt::TimeType, dow::Int; of=Month) -> TimeType

dtをその月の最初のdowに調整します。あるいは、of=Yearを指定すると、その年の最初のdowに調整されます。

source
Dates.tolastFunction
tolast(dt::TimeType, dow::Int; of=Month) -> TimeType

dtをその月の最後のdowに調整します。あるいは、of=Yearを指定すると、その年の最後のdowに調整されます。

source
Dates.tonextMethod
tonext(func::Function, dt::TimeType; step=Day(1), limit=10000, same=false) -> TimeType

dtを調整し、functrueを返すまでstepの増分で最大limit回の反復を行います。funcは単一のTimeType引数を取り、Boolを返す必要があります。samedtfuncを満たすのに考慮されることを許可します。

source
Dates.toprevMethod
toprev(func::Function, dt::TimeType; step=Day(-1), limit=10000, same=false) -> TimeType

dtを調整し、functrueを返すまで、最大limit回の反復をstepの増分で行います。funcは単一のTimeType引数を受け取り、Boolを返す必要があります。sameを使用すると、funcを満たす際にdtを考慮することができます。

source

Periods

Dates.PeriodMethod
Year(v)
Quarter(v)
Month(v)
Week(v)
Day(v)
Hour(v)
Minute(v)
Second(v)
Millisecond(v)
Microsecond(v)
Nanosecond(v)

与えられた v 値を使用して Period 型を構築します。入力は Int64 に損失なく変換可能でなければなりません。

source
Dates.CompoundPeriodMethod
CompoundPeriod(periods) -> CompoundPeriod

VectorPeriodからCompoundPeriodを構築します。同じタイプのすべてのPeriodは合計されます。

julia> Dates.CompoundPeriod(Dates.Hour(12), Dates.Hour(13))
25 hours

julia> Dates.CompoundPeriod(Dates.Hour(-1), Dates.Minute(1))
-1 hour, 1 minute

julia> Dates.CompoundPeriod(Dates.Month(1), Dates.Week(-2))
1 month, -2 weeks

julia> Dates.CompoundPeriod(Dates.Minute(50000))
50000 minutes
source
Dates.canonicalizeFunction
canonicalize(::CompoundPeriod) -> CompoundPeriod

CompoundPeriodを次のルールを適用して標準形に減少させます:

  • より粗いPeriodによって部分的に表現可能な十分大きなPeriodは、複数のPeriodに分割されます(例:Hour(30)Day(1) + Hour(6)になります)
  • 反対の符号を持つPeriodは、可能な場合に結合されます(例:Hour(1) - Day(1)-Hour(23)になります)

julia> canonicalize(Dates.CompoundPeriod(Dates.Hour(12), Dates.Hour(13)))
1 day, 1 hour

julia> canonicalize(Dates.CompoundPeriod(Dates.Hour(-1), Dates.Minute(1)))
-59 minutes

julia> canonicalize(Dates.CompoundPeriod(Dates.Month(1), Dates.Week(-2)))
1 month, -2 weeks

julia> canonicalize(Dates.CompoundPeriod(Dates.Minute(50000)))
4 weeks, 6 days, 17 hours, 20 minutes
source
Dates.valueFunction
Dates.value(x::Period) -> Int64

与えられた期間に対して、その期間に関連付けられた値を返します。例えば、value(Millisecond(10))は整数として10を返します。

source
Dates.defaultFunction
default(p::Period) -> Period

入力されたPeriodに対して適切な「デフォルト」値を返すために、Year、Month、Dayの場合はT(1)を、Hour、Minute、Second、Millisecondの場合はT(0)を返します。

source
Dates.periodsFunction
Dates.periods(::CompoundPeriod) -> Vector{Period}

与えられた CompoundPeriod を構成する PeriodVector を返します。

Julia 1.7

この関数は Julia 1.7 以降が必要です。

source

Rounding Functions

DateDateTime の値は、floorceil、または round を使用して指定された解像度(例:1か月または15分)に丸めることができます。

Base.floorMethod
floor(dt::TimeType, p::Period) -> TimeType

dt以下の最も近いDateまたはDateTimeを解像度pで返します。

便利のために、pは値の代わりに型で指定することもできます:floor(dt, Dates.Hour)floor(dt, Dates.Hour(1))のショートカットです。

julia> floor(Date(1985, 8, 16), Month)
1985-08-01

julia> floor(DateTime(2013, 2, 13, 0, 31, 20), Minute(15))
2013-02-13T00:30:00

julia> floor(DateTime(2016, 8, 6, 12, 0, 0), Day)
2016-08-06T00:00:00
source
Base.ceilMethod
ceil(dt::TimeType, p::Period) -> TimeType

dt以上の最も近いDateまたはDateTimeを解像度pで返します。

便利のために、pは値の代わりに型で指定することもできます:ceil(dt, Dates.Hour)ceil(dt, Dates.Hour(1))のショートカットです。

julia> ceil(Date(1985, 8, 16), Month)
1985-09-01

julia> ceil(DateTime(2013, 2, 13, 0, 31, 20), Minute(15))
2013-02-13T00:45:00

julia> ceil(DateTime(2016, 8, 6, 12, 0, 0), Day)
2016-08-07T00:00:00
source
Base.roundMethod
round(dt::TimeType, p::Period, [r::RoundingMode]) -> TimeType

dtに最も近いDateまたはDateTimeを解像度pで返します。デフォルトでは(RoundNearestTiesUp)、同点(例:9:30を最も近い時間に丸める)は切り上げられます。

便利のために、pは値の代わりに型で指定することもできます:round(dt, Dates.Hour)round(dt, Dates.Hour(1))のショートカットです。

julia> round(Date(1985, 8, 16), Month)
1985-08-01

julia> round(DateTime(2013, 2, 13, 0, 31, 20), Minute(15))
2013-02-13T00:30:00

julia> round(DateTime(2016, 8, 6, 12, 0, 0), Day)
2016-08-07T00:00:00

round(::TimeType, ::Period, ::RoundingMode)の有効な丸めモードはRoundNearestTiesUp(デフォルト)、RoundDownfloor)、およびRoundUpceil)です。

source

ほとんどの Period 値は、指定された解像度に丸めることもできます:

Base.floorMethod
floor(x::Period, precision::T) where T <: Union{TimePeriod, Week, Day} -> T

xprecisionの最も近い倍数に切り下げます。xprecisionが異なるPeriodのサブタイプである場合、返り値はprecisionと同じ型になります。

便利のために、precisionは値の代わりに型で指定することもできます:floor(x, Dates.Hour)floor(x, Dates.Hour(1))のショートカットです。

julia> floor(Day(16), Week)
2 weeks

julia> floor(Minute(44), Minute(15))
30 minutes

julia> floor(Hour(36), Day)
1 day

MonthYearprecisionへの切り下げはサポートされていません。これらのPeriodは長さが不一致だからです。

source
Base.ceilMethod
ceil(x::Period, precision::T) where T <: Union{TimePeriod, Week, Day} -> T

xprecisionの最も近い倍数に切り上げます。xprecisionが異なるPeriodのサブタイプである場合、返される値はprecisionと同じ型になります。

便利のために、precisionは値の代わりに型で指定することもできます:ceil(x, Dates.Hour)ceil(x, Dates.Hour(1))のショートカットです。

julia> ceil(Day(16), Week)
3 weeks

julia> ceil(Minute(44), Minute(15))
45 minutes

julia> ceil(Hour(36), Day)
2 days

MonthYearprecisionへの切り上げはサポートされていません。これらのPeriodは長さが不一致だからです。

source
Base.roundMethod
round(x::Period, precision::T, [r::RoundingMode]) where T <: Union{TimePeriod, Week, Day} -> T

xprecisionの最も近い倍数に丸めます。xprecisionが異なるPeriodのサブタイプである場合、返される値はprecisionと同じ型になります。デフォルトでは(RoundNearestTiesUp)、同点(例:90分を最も近い時間に丸める)は切り上げられます。

便利のために、precisionは値の代わりに型で指定することもできます:round(x, Dates.Hour)round(x, Dates.Hour(1))のショートカットです。

julia> round(Day(16), Week)
2 weeks

julia> round(Minute(44), Minute(15))
45 minutes

julia> round(Hour(36), Day)
2 days

round(::Period, ::T, ::RoundingMode)の有効な丸めモードはRoundNearestTiesUp(デフォルト)、RoundDownfloor)、およびRoundUpceil)です。

MonthYearprecisionへの丸めはサポートされていません。これらのPeriodは長さが不一致だからです。

source

次の関数はエクスポートされていません:

Dates.floorceilFunction
floorceil(dt::TimeType, p::Period) -> (TimeType, TimeType)

解像度 pDate または DateTimefloorceil を同時に返します。個別に floorceil を呼び出すよりも効率的です。

source
floorceil(x::Period, precision::T) where T <: Union{TimePeriod, Week, Day} -> (T, T)

Periodの解像度pfloorceilを同時に返します。floorceilを個別に呼び出すよりも効率的です。

source
Dates.epochdays2dateFunction
epochdays2date(days) -> Date

丸めエポック(0000-01-01T00:00:00)からの経過日数を受け取り、対応するDateを返します。

source
Dates.epochms2datetimeFunction
epochms2datetime(milliseconds) -> DateTime

ミリ秒単位の丸めエポック(0000-01-01T00:00:00)からの経過時間を受け取り、対応するDateTimeを返します。

source
Dates.date2epochdaysFunction
date2epochdays(dt::Date) -> Int64

与えられた Date を取得し、丸めエポック(0000-01-01T00:00:00)からの経過日数を Int64 として返します。

source
Dates.datetime2epochmsFunction
datetime2epochms(dt::DateTime) -> Int64

与えられた DateTime を取得し、丸めエポック(0000-01-01T00:00:00)からのミリ秒数を Int64 として返します。

source

Conversion Functions

Dates.unix2datetimeFunction
unix2datetime(x) -> DateTime

UNIXエポック1970-01-01T00:00:00からの秒数を取得し、対応するDateTimeに変換します。

source
Dates.datetime2unixFunction
datetime2unix(dt::DateTime) -> Float64

与えられた DateTime を取得し、unixエポック 1970-01-01T00:00:00 からの秒数を Float64 として返します。

source
Dates.julian2datetimeFunction
julian2datetime(julian_days) -> DateTime

エポック -4713-11-24T12:00:00 からのユリウス暦の日数を受け取り、対応する DateTime を返します。

source
Dates.datetime2julianFunction
datetime2julian(dt::DateTime) -> Float64

与えられた DateTime を取得し、ユリウス紀元 -4713-11-24T12:00:00 からのユリウス暦の日数を Float64 として返します。

source
Dates.rata2datetimeFunction
rata2datetime(days) -> DateTime

エポック 0000-12-31T00:00:00 からの Rata Die 日数を受け取り、対応する DateTime を返します。

source
Dates.datetime2rataFunction
datetime2rata(dt::TimeType) -> Int64

与えられた Date または DateTime からエポック以来の Rata Die 日数を返します。

source

Constants

曜日:

VariableAbbr.Value (Int)
MondayMon1
TuesdayTue2
WednesdayWed3
ThursdayThu4
FridayFri5
SaturdaySat6
SundaySun7

年の月:

VariableAbbr.Value (Int)
JanuaryJan1
FebruaryFeb2
MarchMar3
AprilApr4
MayMay5
JuneJun6
JulyJul7
AugustAug8
SeptemberSep9
OctoberOct10
NovemberNov11
DecemberDec12

Common Date Formatters

Dates.ISODateTimeFormatConstant
Dates.ISODateTimeFormat

日付と時刻のISO8601フォーマットを説明します。これはDateTimeDates.formatのデフォルト値です。

julia> Dates.format(DateTime(2018, 8, 8, 12, 0, 43, 1), ISODateTimeFormat)
"2018-08-08T12:00:43.001"
source
Dates.ISODateFormatConstant
Dates.ISODateFormat

日付のISO8601形式を説明します。これはDateDates.formatのデフォルト値です。

julia> Dates.format(Date(2018, 8, 8), ISODateFormat)
"2018-08-08"
source
Dates.ISOTimeFormatConstant
Dates.ISOTimeFormat

ISO8601形式の時間のフォーマットを説明します。これはTimeDates.formatのデフォルト値です。

julia> Dates.format(Time(12, 0, 43, 1), ISOTimeFormat)
"12:00:43.001"
source
Dates.RFC1123FormatConstant
Dates.RFC1123Format

日付と時刻のRFC1123形式を説明します。

julia> Dates.format(DateTime(2018, 8, 8, 12, 0, 43, 1), RFC1123Format)
"Wed, 08 Aug 2018 12:00:43"
source
  • 1The notion of the UT second is actually quite fundamental. There are basically two different notions of time generally accepted, one based on the physical rotation of the earth (one full rotation = 1 day), the other based on the SI second (a fixed, constant value). These are radically different! Think about it, a "UT second", as defined relative to the rotation of the earth, may have a different absolute length depending on the day! Anyway, the fact that Date and DateTime are based on UT seconds is a simplifying, yet honest assumption so that things like leap seconds and all their complexity can be avoided. This basis of time is formally called UT or UT1. Basing types on the UT second basically means that every minute has 60 seconds and every day has 24 hours and leads to more natural calculations when working with calendar dates.