Dates
Datesモジュールは、日付を扱うための2つのタイプを提供します:DateとDateTimeで、前者は日単位、後者はミリ秒単位の精度を表します。両者は抽象型TimeTypeのサブタイプです。異なるタイプの動機はシンプルです:いくつかの操作は、より高い精度の複雑さに対処する必要がないとき、コードと精神的な推論の両方の観点からはるかに簡単になります。例えば、4d61726b646f776e2e436f64652822222c2022446174652229_40726566タイプは単一の日付の精度(すなわち、時間、分、または秒は含まれない)にのみ解決されるため、タイムゾーン、夏時間、うるう秒に関する通常の考慮事項は不要であり、回避されます。
両方の Date と DateTime は基本的に不変の Int64 ラッパーです。いずれのタイプの単一の instant フィールドは実際には UTInstant{P} タイプであり、これは UT 秒に基づく連続的に増加する機械のタイムラインを表します [1]。4d61726b646f776e2e436f64652822222c20224461746554696d652229_40726566 タイプはタイムゾーンを認識していません(Python の用語で言うと naive)、Java 8 の LocalDateTime に類似しています。追加のタイムゾーン機能は TimeZones.jl package を通じて追加できます。これは IANA time zone database をコンパイルします。両方の 4d61726b646f776e2e436f64652822222c2022446174652229_40726566 と 4d61726b646f776e2e436f64652822222c20224461746554696d652229_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-31 は 0001-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-01Date または 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番目のスロットの間に-文字があることをパーサーに知らせます。y、m、および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"に注目します。
テキスト形式の月の解析は、略称とフルネームの月名にそれぞれ u と U 文字を通じてサポートされています。デフォルトでは、英語の月名のみがサポートされているため、u は "Jan"、"Feb"、"Mar" などに対応します。そして U は "January"、"February"、"March" などに対応します。他の名前=>値マッピング関数 dayname と monthname と同様に、カスタムロケールは 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以前は、空の文字列をコンストラクタやparseに渡してもエラーが発生せず、適切にDateTime(1)、Date(1)、またはTime(0)が返されました。同様に、tryparseはnothingを返しませんでした。
完全なパースおよびフォーマットのテストと例のスイートは、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 millisecondsAccessor 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)
735264Query 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)
31TimeTypeの年と四半期に関する情報:
julia> Dates.isleapyear(t)
false
julia> Dates.dayofyear(t)
31
julia> Dates.quarterofyear(t)
1
julia> Dates.dayofquarter(t)
31dayname および 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が最初に加算され、その後にMonth、Weekなどが続きます。したがって、以下のは結合性を持ち、うまく機能します:
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-29Adjuster 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つの高次のメソッド、tonext と toprev は、最初の引数として 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-27Base.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 minutesRounding
Date および DateTime の値は、指定された解像度(例:1ヶ月または15分)に丸めることができます floor、ceil、または 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_40726566 は RoundNearestTiesUp 丸めモードを使用します。引き分けを最も近い「偶数」にすることが何を意味するのかを推測するのは難しいです。利用可能な 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 Date と DateTime の値は ISO 8601 標準に従って表現されており、日数(およびミリ秒)の計算に使用される丸め計算の開始点として、0000-01-01T00:00:00 が基準(または「丸めエポック」)として選ばれました。(これは、Julia の内部表現 4d61726b646f776e2e436f64652822222c2022446174652229_40726566 が Rata 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) に最も近い値に丸めるとどうなりますか?ここで P は Period 型です。いくつかのケース(具体的には、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.Period — Type期間
年
四半期
月
週
日
時間
分
秒
ミリ秒
マイクロ秒
ナノ秒Period 型は、時間の離散的で人間の表現を表します。
Dates.CompoundPeriod — TypeCompoundPeriodCompoundPeriodは、固定の小さな期間の倍数ではない時間の期間を表現するのに便利です。たとえば、「1年と1日」は固定の数の日ではありませんが、CompoundPeriodを使用して表現できます。実際、CompoundPeriodは異なる期間タイプの加算によって自動的に生成されます。たとえば、Year(1) + Day(1)はCompoundPeriodの結果を生成します。
Dates.Instant — TypeInstantInstant型は、エポックから始まる連続したタイムラインとしての時間の整数ベースの機械表現を表します。
Dates.UTInstant — TypeUTInstant{T}UTInstantは、UT時間に基づく機械のタイムラインを表します(1日 = 地球の1回の回転)。Tは、インスタントの解像度または精度を示すPeriodパラメータです。
Dates.TimeType — TypeTimeTypeTimeType タイプは、機械のインスタンスである Instant をラップして、人間が理解できる形で機械の瞬間を提供します。Time、DateTime、および Date は TimeType のサブタイプです。
Dates.DateTime — TypeDateTimeDateTimeは、先行グレゴリオ暦に従った時点を表します。時間の最小解像度はミリ秒です(すなわち、マイクロ秒やナノ秒はこの型では表現できません)。この型は固定小数点演算をサポートしているため、アンダーフロー(およびオーバーフロー)を起こす可能性があります。注目すべき結果は、MicrosecondやNanosecondを加算する際の丸めです:
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.901Dates.Date — TypeDateDateはUTInstant{Day}をラップし、先行グレゴリオ暦に従って解釈します。
Dates.Time — TypeTimeTimeはNanosecondをラップし、24時間の1日の特定の瞬間を表します。
Dates.TimeZone — TypeTimeZone経度に基づいて特定の場所での時間を決定する地理的ゾーン。いくつかのタイムゾーンは夏時間を観測します(例:EST -> EDT)。実装やさらなるサポートについては、TimeZones.jl パッケージを参照してください。
Dates.UTC — TypeUTCUTC(協定世界時)は、すべての他の時間が測定されるTimeZoneです。これは、0°経度の時間に関連付けられています。夏時間の調整は行われません。
Dates Functions
Dates.DateTime — MethodDateTime(y, [m, d, h, mi, s, ms]) -> DateTime部分から DateTime 型を構築します。引数は Int64 に変換可能でなければなりません。
Dates.DateTime — MethodDateTime(periods::Period...) -> DateTimePeriod型の部分からDateTime型を構築します。引数は任意の順序で指定できます。提供されていないDateTimeの部分はDates.default(period)の値にデフォルト設定されます。
Dates.DateTime — MethodDateTime(f::Function, y[, m, d, h, mi, s]; step=Day(1), limit=10000) -> DateTime調整者APIを通じてDateTimeを作成します。出発点は提供されたy, m, d...引数から構築され、f::Functionがtrueを返すまで調整されます。調整のステップサイズは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:
[...]Dates.DateTime — MethodDateTime(dt::Date) -> DateTimeDateをDateTimeに変換します。新しいDateTimeの時間、分、秒、およびミリ秒の部分はゼロであると仮定されます。
Dates.DateTime — MethodDateTime(dt::AbstractString, format::AbstractString; locale="english") -> DateTimedt 日付時刻文字列を format 文字列で指定されたパターンに従って解析することで DateTime を構築します(構文については DateFormat を参照してください)。
このメソッドは呼び出されるたびに 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:00Dates.format — Methodformat(dt::TimeType, format::AbstractString; locale="english") -> AbstractStringTimeTypeオブジェクトを使用して文字列を構築し、提供されたformatを適用します。次の文字コードを使用してformat文字列を構築できます:
| コード | 例 | コメント |
|---|---|---|
y | 6 | 固定幅の数値年 |
Y | 1996 | 最小幅の数値年 |
m | 1, 12 | 最小幅の数値月 |
u | Jan | localeに応じて3文字に短縮された月名 |
U | January | localeキーワードに応じた完全な月名 |
d | 1, 31 | 最小幅の月の日 |
H | 0, 23 | 最小幅の時間(24時間制) |
M | 0, 59 | 最小幅の分 |
S | 0, 59 | 最小幅の秒 |
s | 000, 500 | 最小幅3のミリ秒 |
e | Mon, Tue | 短縮された曜日 |
E | Monday | 完全な曜日名 |
連続するコード文字の数は、コードの幅を示します。yyyy-mmの形式は、コードyが幅4、mが幅2であることを指定します。数値を生成するコードには、固定幅または最小幅の関連モードがあります。固定幅モードは、指定された幅より短い場合に値をゼロで左詰めし、長い場合は値を切り捨てます。最小幅モードは、幅より長い値を切り捨てない点を除いて、固定幅と同じように機能します。
formatを作成する際には、任意の非コード文字を区切り文字として使用できます。たとえば、文字列"1996-01-15T00:00:00"を生成するには、formatとして"yyyy-mm-ddTHH:MM:SS"を使用できます。コード文字をリテラルとして使用する必要がある場合は、エスケープ文字のバックスラッシュを使用できます。文字列"1996y01m"は、フォーマットraw"yyyy\ymm\m"で生成できます。
Dates.DateFormat — TypeDateFormat(format::AbstractString, locale="english") -> DateFormat日付文字列を解析したり、日付オブジェクトを文字列としてフォーマットするために使用できる日付フォーマットオブジェクトを構築します。次の文字コードを使用して format 文字列を構築できます:
| コード | 一致する | コメント |
|---|---|---|
Y | 1996, 96 | 1996年、0096年を返します |
y | 1996, 96 | parseでは Y と同じですが、formatでは余分な桁を破棄します |
m | 1, 01 | 1桁または2桁の月に一致します |
u | Jan | localeキーワードに従った省略形の月に一致します |
U | January | localeキーワードに従った完全な月名に一致します |
d | 1, 01 | 1桁または2桁の日に一致します |
H | 00 | 時間(24時間制)に一致します |
I | 00 | 12時間制で時間を出力するためのもの |
M | 00 | 分に一致します |
S | 00 | 秒に一致します |
s | .500 | ミリ秒に一致します |
e | Mon, Tues | 週の省略形の日に一致します |
E | Monday | 週の完全な名前の日に一致します |
p | AM | AM/PM(大文字小文字を区別しない)に一致します |
yyyymmdd | 19960101 | 固定幅の年、月、日と一致します |
上記にリストされていない文字は、通常、日付と時間のスロットの間の区切り文字として扱われます。たとえば、"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オブジェクトを使用して日付文字列を解析および書き込む方法を確認してください。
Dates.@dateformat_str — Macrodateformat"Y-m-d H:M:S"DateFormat オブジェクトを作成します。DateFormat("Y-m-d H:M:S") に似ていますが、マクロ展開中に一度だけ DateFormat オブジェクトを作成します。
フォーマット指定子の詳細については、DateFormat を参照してください。
Dates.DateTime — MethodDateTime(dt::AbstractString, df::DateFormat=ISODateTimeFormat) -> DateTimedt 日付時刻文字列を DateFormat オブジェクトで指定されたパターンに従って解析することによって DateTime を構築します。省略した場合は dateformat"yyyy-mm-dd\THH:MM:SS.s" が使用されます。
DateTime(::AbstractString, ::AbstractString) と似ていますが、事前に作成された DateFormat オブジェクトを使用することで、同様の形式の日時文字列を繰り返し解析する際により効率的です。
Dates.Date — MethodDate(y, [m, d]) -> Date部分から Date 型を構築します。引数は Int64 に変換可能でなければなりません。
Dates.Date — MethodDate(period::Period...) -> DatePeriod型の部分からDate型を構築します。引数は任意の順序で指定できます。提供されていないDateの部分はDates.default(period)の値にデフォルト設定されます。
Dates.Date — MethodDate(f::Function, y[, m, d]; step=Day(1), limit=10000) -> Date調整者APIを通じてDateを作成します。出発点は提供されたy, m, d引数から構築され、f::Functionがtrueを返すまで調整されます。調整のステップサイズは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:
[...]Dates.Date — MethodDate(dt::DateTime) -> DateDateTimeをDateに変換します。DateTimeの時間、分、秒、およびミリ秒の部分は切り捨てられ、年、月、日だけが構築に使用されます。
Dates.Date — MethodDate(d::AbstractString, format::AbstractString; locale="english") -> Dateformat文字列で指定されたパターンに従って、d日付文字列を解析することによってDateを構築します(構文についてはDateFormatを参照してください)。
このメソッドは呼び出されるたびに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-02Dates.Date — MethodDate(d::AbstractString, df::DateFormat=ISODateFormat) -> Dated 日付文字列を DateFormat オブジェクトで指定されたパターンに従って解析することによって Date を構築します。省略した場合は dateformat"yyyy-mm-dd" になります。
Date(::AbstractString, ::AbstractString) に似ていますが、事前に作成された DateFormat オブジェクトを使用して、同様の形式の日時文字列を繰り返し解析する際により効率的です。
Dates.Time — MethodTime(h, [mi, s, ms, us, ns]) -> Time部分から Time 型を構築します。引数は Int64 に変換可能でなければなりません。
Dates.Time — MethodTime(period::TimePeriod...) -> TimePeriod 型の部分から Time 型を構築します。引数は任意の順序で指定できます。提供されていない Time 部分は Dates.default(period) の値にデフォルト設定されます。
Dates.Time — MethodTime(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::Functionがtrueを返すまで調整されます。調整のステップサイズは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:
[...]Dates.Time — MethodTime(dt::DateTime) -> TimeDateTimeをTimeに変換します。DateTimeの時間、分、秒、およびミリ秒の部分が新しいTimeを作成するために使用されます。マイクロ秒とナノ秒はデフォルトでゼロです。
Dates.Time — MethodTime(t::AbstractString, format::AbstractString; locale="english") -> Timet 時間文字列を format 文字列で指定されたパターンに従って解析することで Time を構築します(構文については DateFormat を参照してください)。
このメソッドは呼び出されるたびに 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:00Dates.Time — MethodTime(t::AbstractString, df::DateFormat=ISOTimeFormat) -> TimeTimeを構築するには、DateFormatオブジェクトで指定されたパターンに従ってt日付時刻文字列を解析します。省略した場合は、dateformat"HH:MM:SS.s"が使用されます。
Time(::AbstractString, ::AbstractString)に似ていますが、事前に作成されたDateFormatオブジェクトを使用して、同様の形式の時刻文字列を繰り返し解析する際により効率的です。
Dates.now — Methodnow() -> DateTimeユーザーのシステム時間に対応する DateTime を返し、システムのタイムゾーンロケールを含みます。
Dates.now — Methodnow(::Type{UTC}) -> DateTimeユーザーのシステム時間に対応する DateTime をUTC/GMTとして返します。他のタイムゾーンについては、TimeZones.jlパッケージを参照してください。
例
julia> now(UTC)
2023-01-04T10:52:24.864Base.eps — Methodeps(::Type{DateTime}) -> ミリ秒
eps(::Type{Date}) -> 日
eps(::Type{Time}) -> ナノ秒
eps(::TimeType) -> 期間TimeTypeによってサポートされる最小単位の値を返します。
例
julia> eps(DateTime)
1 ミリ秒
julia> eps(Date)
1 日
julia> eps(Time)
1 ナノ秒Accessor Functions
Dates.year — Functionyear(dt::TimeType) -> Int64Date または DateTime の年を Int64 として返します。
Dates.month — Functionmonth(dt::TimeType) -> Int64Date または DateTime の月を Int64 として返します。
Dates.week — Functionweek(dt::TimeType) -> Int64Date または DateTime の ISO week date を 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))
53Dates.day — Functionday(dt::TimeType) -> Int64Date または DateTime の月の日を Int64 として返します。
Dates.hour — Functionhour(dt::DateTime) -> Int64DateTimeの時刻をInt64として返します。
hour(t::Time) -> Int64Timeの時間をInt64として返します。
Dates.minute — Functionminute(dt::DateTime) -> Int64DateTimeの分をInt64として返します。
minute(t::Time) -> Int64Timeの分をInt64として返します。
Dates.second — Functionsecond(dt::DateTime) -> Int64DateTimeの秒をInt64として返します。
second(t::Time) -> Int64Timeの秒をInt64として返します。
Dates.millisecond — Functionmillisecond(dt::DateTime) -> Int64DateTimeのミリ秒をInt64として返します。
millisecond(t::Time) -> Int64Timeのミリ秒をInt64として返します。
Dates.microsecond — Functionmicrosecond(t::Time) -> Int64Timeのマイクロ秒をInt64として返します。
Dates.nanosecond — Functionnanosecond(t::Time) -> Int64Timeのナノ秒をInt64として返します。
Dates.Year — MethodYear(v)与えられた v 値を使用して Year オブジェクトを構築します。入力は Int64 に損失なく変換可能でなければなりません。
Dates.Month — MethodMonth(v)与えられた v 値を使用して Month オブジェクトを構築します。入力は Int64 に損失なく変換可能でなければなりません。
Dates.Week — MethodWeek(v)与えられた v 値を持つ Week オブジェクトを構築します。入力は Int64 に損失なく変換可能でなければなりません。
Dates.Day — MethodDay(v)与えられた v 値を持つ Day オブジェクトを構築します。入力は Int64 に損失なく変換可能でなければなりません。
Dates.Hour — MethodHour(dt::DateTime) -> HourDateTimeの時間部分をHourとして返します。
Dates.Minute — MethodMinute(dt::DateTime) -> MinuteDateTimeの分の部分をMinuteとして返します。
Dates.Second — MethodSecond(dt::DateTime) -> SecondDateTimeの秒の部分をSecondとして返します。
Dates.Millisecond — MethodMillisecond(dt::DateTime) -> MillisecondDateTimeのミリ秒部分をMillisecondとして返します。
Dates.Microsecond — MethodMicrosecond(dt::Time) -> MicrosecondTimeのマイクロ秒部分をMicrosecondとして返します。
Dates.Nanosecond — MethodNanosecond(dt::Time) -> NanosecondTimeのナノ秒部分をNanosecondとして返します。
Dates.yearmonth — Functionyearmonth(dt::TimeType) -> (Int64, Int64)Date または DateTime の年と月の部分を同時に返します。
Dates.monthday — Functionmonthday(dt::TimeType) -> (Int64, Int64)DateまたはDateTimeの月と日部分を同時に返します。
Dates.yearmonthday — Functionyearmonthday(dt::TimeType) -> (Int64, Int64, Int64)Date または DateTime の年、月、日部分を同時に返します。
Query Functions
Dates.dayname — Functiondayname(dt::TimeType; locale="english") -> String
dayname(day::Integer; locale="english") -> String指定されたlocaleのDateまたはDateTimeの曜日に対応する完全な曜日名を返します。Integerも受け付けます。
例
julia> dayname(Date("2000-01-01"))
"Saturday"
julia> dayname(4)
"Thursday"Dates.dayabbr — Functiondayabbr(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"Dates.dayofweek — Functiondayofweek(dt::TimeType) -> Int64曜日をInt64として返します。1 = 月曜日, 2 = 火曜日, など。
例
julia> dayofweek(Date("2000-01-01"))
6Dates.dayofmonth — Functiondayofmonth(dt::TimeType) -> Int64Date または DateTime の月の日を Int64 として返します。
Dates.dayofweekofmonth — Functiondayofweekofmonth(dt::TimeType) -> Intdtの曜日に対して、その月の中で何番目であるかを返します。したがって、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"))
3Dates.daysofweekinmonth — Functiondaysofweekinmonth(dt::TimeType) -> Intdtの曜日に対して、その月におけるその曜日の合計数を返します。4または5を返します。月の最終週の日を指定するために、調整関数にdayofweekofmonth(dt) == daysofweekinmonth(dt)を含めることで、時間的表現で便利です。
例
julia> daysofweekinmonth(Date("2005-01-01"))
5
julia> daysofweekinmonth(Date("2005-01-04"))
4Dates.monthname — Functionmonthname(dt::TimeType; locale="english") -> String
monthname(month::Integer, locale="english") -> String指定されたlocaleでDateまたはDateTimeまたはIntegerの月のフルネームを返します。
例
julia> monthname(Date("2005-01-04"))
"January"
julia> monthname(2)
"February"Dates.monthabbr — Functionmonthabbr(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"Dates.daysinmonth — Functiondaysinmonth(dt::TimeType) -> Intdtの月の日数を返します。値は28、29、30、または31になります。
例
julia> daysinmonth(Date("2000-01"))
31
julia> daysinmonth(Date("2001-02"))
28
julia> daysinmonth(Date("2000-02"))
29Dates.isleapyear — Functionisleapyear(dt::TimeType) -> Booldtの年がうるう年であればtrueを返します。
例
julia> isleapyear(Date("2004"))
true
julia> isleapyear(Date("2005"))
falseDates.dayofyear — Functiondayofyear(dt::TimeType) -> Intdtの年の日を返します。1月1日が1日目です。
Dates.daysinyear — Functiondaysinyear(dt::TimeType) -> Intdtの年がうるう年であれば366を返し、そうでなければ365を返します。
例
julia> daysinyear(1999)
365
julia> daysinyear(2000)
366Dates.quarterofyear — Functionquarterofyear(dt::TimeType) -> Intdt が属する四半期を返します。値の範囲は 1:4 です。
Dates.dayofquarter — Functiondayofquarter(dt::TimeType) -> Intdtの現在の四半期の日を返します。値の範囲は1:92です。
Adjuster Functions
Base.trunc — Methodtrunc(dt::TimeType, ::Type{Period}) -> TimeTypedtの値を指定されたPeriod型に従って切り捨てます。
例
julia> trunc(DateTime("1996-01-01T12:30:00"), Day)
1996-01-01T00:00:00Dates.firstdayofweek — Functionfirstdayofweek(dt::TimeType) -> TimeTypedtをその週の月曜日に調整します。
例
julia> firstdayofweek(DateTime("1996-01-05T12:30:00"))
1996-01-01T00:00:00Dates.lastdayofweek — Functionlastdayofweek(dt::TimeType) -> TimeTypedtをその週の日曜日に調整します。
例
julia> lastdayofweek(DateTime("1996-01-05T12:30:00"))
1996-01-07T00:00:00Dates.firstdayofmonth — Functionfirstdayofmonth(dt::TimeType) -> TimeTypedtをその月の初日に調整します。
例
julia> firstdayofmonth(DateTime("1996-05-20"))
1996-05-01T00:00:00Dates.lastdayofmonth — Functionlastdayofmonth(dt::TimeType) -> TimeTypedtをその月の最終日に調整します。
例
julia> lastdayofmonth(DateTime("1996-05-20"))
1996-05-31T00:00:00Dates.firstdayofyear — Functionfirstdayofyear(dt::TimeType) -> TimeTypedtをその年の最初の日に調整します。
例
julia> firstdayofyear(DateTime("1996-05-20"))
1996-01-01T00:00:00Dates.lastdayofyear — Functionlastdayofyear(dt::TimeType) -> TimeTypedtをその年の最終日に調整します。
例
julia> lastdayofyear(DateTime("1996-05-20"))
1996-12-31T00:00:00Dates.firstdayofquarter — Functionfirstdayofquarter(dt::TimeType) -> TimeTypedtをその四半期の初日に調整します。
例
julia> firstdayofquarter(DateTime("1996-05-20"))
1996-04-01T00:00:00
julia> firstdayofquarter(DateTime("1996-08-20"))
1996-07-01T00:00:00Dates.lastdayofquarter — Functionlastdayofquarter(dt::TimeType) -> TimeTypedtをその四半期の最終日に調整します。
例
julia> lastdayofquarter(DateTime("1996-05-20"))
1996-06-30T00:00:00
julia> lastdayofquarter(DateTime("1996-08-20"))
1996-09-30T00:00:00Dates.tonext — Methodtonext(dt::TimeType, dow::Int; same::Bool=false) -> TimeTypedtをdowに対応する次の曜日に調整します。1 = 月曜日、2 = 火曜日、など。same=trueを設定すると、現在のdtが次のdowとして考慮され、調整が行われないようになります。
Dates.toprev — Methodtoprev(dt::TimeType, dow::Int; same::Bool=false) -> TimeTypedtをdowに対応する前の曜日に調整します。1 = 月曜日、2 = 火曜日、など。same=trueを設定すると、現在のdtが前のdowとして考慮され、調整が行われないようになります。
Dates.tofirst — Functiontofirst(dt::TimeType, dow::Int; of=Month) -> TimeTypedtをその月の最初のdowに調整します。あるいは、of=Yearを指定すると、その年の最初のdowに調整されます。
Dates.tolast — Functiontolast(dt::TimeType, dow::Int; of=Month) -> TimeTypedtをその月の最後のdowに調整します。あるいは、of=Yearを指定すると、その年の最後のdowに調整されます。
Dates.tonext — Methodtonext(func::Function, dt::TimeType; step=Day(1), limit=10000, same=false) -> TimeTypedtを調整し、funcがtrueを返すまでstepの増分で最大limit回の反復を行います。funcは単一のTimeType引数を取り、Boolを返す必要があります。sameはdtがfuncを満たすのに考慮されることを許可します。
Dates.toprev — Methodtoprev(func::Function, dt::TimeType; step=Day(-1), limit=10000, same=false) -> TimeTypedtを調整し、funcがtrueを返すまで、最大limit回の反復をstepの増分で行います。funcは単一のTimeType引数を受け取り、Boolを返す必要があります。sameを使用すると、funcを満たす際にdtを考慮することができます。
Periods
Dates.Period — MethodYear(v)
Quarter(v)
Month(v)
Week(v)
Day(v)
Hour(v)
Minute(v)
Second(v)
Millisecond(v)
Microsecond(v)
Nanosecond(v)与えられた v 値を使用して Period 型を構築します。入力は Int64 に損失なく変換可能でなければなりません。
Dates.CompoundPeriod — MethodCompoundPeriod(periods) -> CompoundPeriodVectorのPeriodから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 minutesDates.canonicalize — Functioncanonicalize(::CompoundPeriod) -> CompoundPeriodCompoundPeriodを次のルールを適用して標準形に減少させます:
- より粗い
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 minutesDates.value — FunctionDates.value(x::Period) -> Int64与えられた期間に対して、その期間に関連付けられた値を返します。例えば、value(Millisecond(10))は整数として10を返します。
Dates.default — Functiondefault(p::Period) -> Period入力されたPeriodに対して適切な「デフォルト」値を返すために、Year、Month、Dayの場合はT(1)を、Hour、Minute、Second、Millisecondの場合はT(0)を返します。
Dates.periods — FunctionDates.periods(::CompoundPeriod) -> Vector{Period}与えられた CompoundPeriod を構成する Period の Vector を返します。
Rounding Functions
Date と DateTime の値は、floor、ceil、または round を使用して指定された解像度(例:1か月または15分)に丸めることができます。
Base.floor — Methodfloor(dt::TimeType, p::Period) -> TimeTypedt以下の最も近い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:00Base.ceil — Methodceil(dt::TimeType, p::Period) -> TimeTypedt以上の最も近い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:00Base.round — Methodround(dt::TimeType, p::Period, [r::RoundingMode]) -> TimeTypedtに最も近い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:00round(::TimeType, ::Period, ::RoundingMode)の有効な丸めモードはRoundNearestTiesUp(デフォルト)、RoundDown(floor)、およびRoundUp(ceil)です。
ほとんどの Period 値は、指定された解像度に丸めることもできます:
Base.floor — Methodfloor(x::Period, precision::T) where T <: Union{TimePeriod, Week, Day} -> Txをprecisionの最も近い倍数に切り下げます。xとprecisionが異なる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 dayMonthやYearのprecisionへの切り下げはサポートされていません。これらのPeriodは長さが不一致だからです。
Base.ceil — Methodceil(x::Period, precision::T) where T <: Union{TimePeriod, Week, Day} -> Txをprecisionの最も近い倍数に切り上げます。xとprecisionが異なる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 daysMonthやYearのprecisionへの切り上げはサポートされていません。これらのPeriodは長さが不一致だからです。
Base.round — Methodround(x::Period, precision::T, [r::RoundingMode]) where T <: Union{TimePeriod, Week, Day} -> Txをprecisionの最も近い倍数に丸めます。xとprecisionが異なる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 daysround(::Period, ::T, ::RoundingMode)の有効な丸めモードはRoundNearestTiesUp(デフォルト)、RoundDown(floor)、およびRoundUp(ceil)です。
MonthやYearのprecisionへの丸めはサポートされていません。これらのPeriodは長さが不一致だからです。
次の関数はエクスポートされていません:
Dates.floorceil — Functionfloorceil(dt::TimeType, p::Period) -> (TimeType, TimeType)解像度 p で Date または DateTime の floor と ceil を同時に返します。個別に floor と ceil を呼び出すよりも効率的です。
floorceil(x::Period, precision::T) where T <: Union{TimePeriod, Week, Day} -> (T, T)Periodの解像度pでfloorとceilを同時に返します。floorとceilを個別に呼び出すよりも効率的です。
Dates.epochdays2date — Functionepochdays2date(days) -> Date丸めエポック(0000-01-01T00:00:00)からの経過日数を受け取り、対応するDateを返します。
Dates.epochms2datetime — Functionepochms2datetime(milliseconds) -> DateTimeミリ秒単位の丸めエポック(0000-01-01T00:00:00)からの経過時間を受け取り、対応するDateTimeを返します。
Dates.date2epochdays — Functiondate2epochdays(dt::Date) -> Int64与えられた Date を取得し、丸めエポック(0000-01-01T00:00:00)からの経過日数を Int64 として返します。
Dates.datetime2epochms — Functiondatetime2epochms(dt::DateTime) -> Int64与えられた DateTime を取得し、丸めエポック(0000-01-01T00:00:00)からのミリ秒数を Int64 として返します。
Conversion Functions
Dates.today — Functiontoday() -> Datenow()の日時部分を返します。
Dates.unix2datetime — Functionunix2datetime(x) -> DateTimeUNIXエポック1970-01-01T00:00:00からの秒数を取得し、対応するDateTimeに変換します。
Dates.datetime2unix — Functiondatetime2unix(dt::DateTime) -> Float64与えられた DateTime を取得し、unixエポック 1970-01-01T00:00:00 からの秒数を Float64 として返します。
Dates.julian2datetime — Functionjulian2datetime(julian_days) -> DateTimeエポック -4713-11-24T12:00:00 からのユリウス暦の日数を受け取り、対応する DateTime を返します。
Dates.datetime2julian — Functiondatetime2julian(dt::DateTime) -> Float64与えられた DateTime を取得し、ユリウス紀元 -4713-11-24T12:00:00 からのユリウス暦の日数を Float64 として返します。
Dates.rata2datetime — Functionrata2datetime(days) -> DateTimeエポック 0000-12-31T00:00:00 からの Rata Die 日数を受け取り、対応する DateTime を返します。
Dates.datetime2rata — Functiondatetime2rata(dt::TimeType) -> Int64与えられた Date または DateTime からエポック以来の Rata Die 日数を返します。
Constants
曜日:
| Variable | Abbr. | Value (Int) |
|---|---|---|
Monday | Mon | 1 |
Tuesday | Tue | 2 |
Wednesday | Wed | 3 |
Thursday | Thu | 4 |
Friday | Fri | 5 |
Saturday | Sat | 6 |
Sunday | Sun | 7 |
年の月:
| Variable | Abbr. | Value (Int) |
|---|---|---|
January | Jan | 1 |
February | Feb | 2 |
March | Mar | 3 |
April | Apr | 4 |
May | May | 5 |
June | Jun | 6 |
July | Jul | 7 |
August | Aug | 8 |
September | Sep | 9 |
October | Oct | 10 |
November | Nov | 11 |
December | Dec | 12 |
Common Date Formatters
Dates.ISODateTimeFormat — ConstantDates.ISODateTimeFormat日付と時刻のISO8601フォーマットを説明します。これはDateTimeのDates.formatのデフォルト値です。
例
julia> Dates.format(DateTime(2018, 8, 8, 12, 0, 43, 1), ISODateTimeFormat)
"2018-08-08T12:00:43.001"Dates.ISODateFormat — ConstantDates.ISODateFormat日付のISO8601形式を説明します。これはDateのDates.formatのデフォルト値です。
例
julia> Dates.format(Date(2018, 8, 8), ISODateFormat)
"2018-08-08"Dates.ISOTimeFormat — ConstantDates.ISOTimeFormatISO8601形式の時間のフォーマットを説明します。これはTimeのDates.formatのデフォルト値です。
例
julia> Dates.format(Time(12, 0, 43, 1), ISOTimeFormat)
"12:00:43.001"Dates.RFC1123Format — ConstantDates.RFC1123Format日付と時刻のRFC1123形式を説明します。
例
julia> Dates.format(DateTime(2018, 8, 8, 12, 0, 43, 1), RFC1123Format)
"Wed, 08 Aug 2018 12:00:43"- 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
DateandDateTimeare 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.