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_40726566ISO 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 関数を使用して行いますが、オプションの第三引数として 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

While propercase return the same value in the corresponding Period type:

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

It's good practice when using any language/date framework to be familiar with how date-period arithmetic is handled as there are some tricky issues to deal with (though much less so for day-precision types).

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)に調整されます。このアプローチの影響は何でしょうか?日付 2014-02-28 + Month(1) == 2014-03-28 にもう1か月を追加してみましょう。え?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モジュールは、時間的ルールを簡潔に表現するのに役立つ便利なメソッドを通じてアジャスターAPIを提供します。最初のグループのアジャスターメソッドは、週、月、四半期、年の最初と最後に関するものです。それぞれは単一の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ブロック構文で役立ちます:

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

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

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_40726566 メソッドは RoundNearestTiesUp 丸めモードを使用します。引き分けを最も近い「偶数」にする 4d61726b646f776e2e436f64652822222c202254696d65547970652229_40726566 が何を意味するのかを推測するのは難しいです。利用可能な 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で割り切れるからです。

ジュリア DateDateTime の値は ISO 8601 標準に従って表現されており、日数(およびミリ秒)の計算に使用される丸め計算の開始点として 0000-01-01T00:00:00 が基準(または「丸めエポック」)として選ばれました。(これは、ジュリアの内部表現 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の最初の週の最初の日)を使用します。

ここに、期待される動作が必ずしも明白ではない関連するケースがあります:PPeriod型であるとき、最も近いP(2)に丸めると何が起こるでしょうか?いくつかのケース(具体的には、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 型は、エポックから始まる連続したタイムラインとしての時間の整数ベースの機械表現を表します。

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
日付

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

source
Dates.TimeType
時間

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

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

format 文字列に従って dt 日付時刻文字列を解析することで 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"は、フォーマット"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は、調整APIがエラーを投げる前に追求する最大反復回数の制限を提供します(f::Functionが決して満たされない場合)。

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="japanese") -> Date

dの日付文字列をformat文字列で指定されたパターンに従って解析することで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

t 日付時刻文字列を DateFormat オブジェクトで指定されたパターンに従って解析することによって Time を構築します。省略した場合は、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) -> 期間

# 例

jldoctest 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週日付Int64 として返します。年の最初の週は、その年の最初の木曜日を含む週であり、これにより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="japanese") -> String
dayname(day::Integer; locale="japanese") -> String

与えられた locale における Date または DateTime の曜日に対応する完全な曜日名を返します。整数も受け付けます。

julia> dayname(Date("2000-01-01"))
"土曜日"

julia> dayname(4)
"木曜日"
source
Dates.dayabbrFunction
dayabbr(dt::TimeType; locale="japanese") -> String
dayabbr(day::Integer; locale="japanese") -> String

与えられた locale における Date または DateTime の曜日に対応する略称を返します。Integer も受け付けます。

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

julia> dayabbr(3)
"水"
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="日本語") -> String
monthname(month::Integer, locale="日本語") -> String

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

julia> monthname(Date("2005-01-04"))
"1月"

julia> monthname(2)
"2月"
source
Dates.monthabbrFunction
monthabbr(dt::TimeType; locale="日本語") -> String
monthabbr(month::Integer, locale="日本語") -> String

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

julia> monthabbr(Date("2005-01-04"))
"1月"

julia> monthabbr(2)
"2月"
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

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

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を返すまで、最大limit回の反復をstepの増分で行います。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を返す必要があります。samedtfuncを満たすことを考慮することを許可します。

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

PeriodVectorから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)

Periodfloorceilを解像度pで同時に返します。個別に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.