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-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番目のスロットの間に-
文字があるべきことをパーサーに知らせます。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
関数を使用して行いますが、オプションの第三引数として 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 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
が常に最初に加えられ、その後に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-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つの高次のメソッド、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ブロック構文で役立ちます:
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
の値は、floor
、ceil
、または 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
メソッドとは異なり、デフォルトで偶数に向かって引き分けを行うのではなく、TimeType
4d61726b646f776e2e436f64652822222c2022726f756e642229_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で割り切れるからです。
ジュリア Date
と DateTime
の値は ISO 8601 標準に従って表現されており、日数(およびミリ秒)の計算に使用される丸め計算の開始点として 0000-01-01T00:00:00
が基準(または「丸めエポック」)として選ばれました。(これは、ジュリアの内部表現 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
がPeriod
型であるとき、最も近い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.Period
— Type期間
年
四半期
月
週
日
時間
分
秒
ミリ秒
マイクロ秒
ナノ秒
Period
型は、時間の離散的で人間の表現を表します。
Dates.CompoundPeriod
— TypeCompoundPeriod
CompoundPeriod
は、より小さな期間の固定の倍数ではない時間の期間を表現するのに便利です。たとえば、「1年と1日」は固定の数の日ではありませんが、CompoundPeriod
を使用して表現できます。実際、CompoundPeriod
は異なる期間タイプの加算によって自動的に生成されます。たとえば、Year(1) + Day(1)
はCompoundPeriod
の結果を生成します。
Dates.Instant
— Typeインスタント
Instant
型は、エポックから始まる連続したタイムラインとしての時間の整数ベースの機械表現を表します。
Dates.UTInstant
— TypeUTInstant{T}
UTInstant
は、UT時間に基づく機械のタイムラインを表します(1日 = 地球の1回の回転)。T
は、インスタントの解像度または精度を示すPeriod
パラメータです。
Dates.TimeType
— TypeTimeType
TimeType
タイプは、機械のインスタンスである Instant
をラップして、人間が理解できる形で機械の瞬間を提供します。Time
、DateTime
、および Date
は TimeType
のサブタイプです。
Dates.DateTime
— TypeDateTime
DateTime
は、先行グレゴリオ暦に従った時点を表します。時間の最も細かい解像度はミリ秒です(すなわち、マイクロ秒やナノ秒はこの型では表現できません)。この型は固定小数点演算をサポートしているため、アンダーフロー(およびオーバーフロー)を起こす可能性があります。注目すべき結果は、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.901
Dates.Date
— Type日付
Date
は UTInstant{Day}
をラップし、先行グレゴリオ暦に従って解釈します。
Dates.Time
— Type時間
Time
は Nanosecond
をラップし、24時間の特定の瞬間を表します。
Dates.TimeZone
— TypeTimeZone
経度に基づいて特定の場所での時間を決定する地理的ゾーン。いくつかのタイムゾーンは夏時間を観測します(例:EST -> EDT)。実装やさらなるサポートについては、TimeZones.jl
パッケージを参照してください。
Dates.UTC
— TypeUTC
UTC
、すなわち協定世界時は、すべての他の時間が測定される基準となるTimeZone
です。これは、0°経度の時間に関連付けられています。夏時間の調整は行われません。
Dates Functions
Dates.DateTime
— MethodDateTime(y, [m, d, h, mi, s, ms]) -> DateTime
部分から DateTime
型を構築します。引数は Int64
に変換可能でなければなりません。
Dates.DateTime
— MethodDateTime(periods::Period...) -> DateTime
Period
型の部分から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) -> DateTime
Date
をDateTime
に変換します。新しいDateTime
の時間、分、秒、およびミリ秒の部分はゼロであると仮定されます。
Dates.DateTime
— MethodDateTime(dt::AbstractString, format::AbstractString; locale="english") -> DateTime
format
文字列に従って dt
日付時刻文字列を解析することで 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:00
Dates.format
— Methodformat(dt::TimeType, format::AbstractString; locale="english") -> AbstractString
TimeType
オブジェクトを使用し、提供された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"は、フォーマット"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) -> DateTime
dt
日付時刻文字列を 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...) -> Date
Period
型の部分から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
は、調整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:
[...]
Dates.Date
— MethodDate(dt::DateTime) -> Date
DateTime
をDate
に変換します。DateTime
の時間、分、秒、およびミリ秒の部分は切り捨てられ、年、月、日部分のみが構築に使用されます。
Dates.Date
— MethodDate(d::AbstractString, format::AbstractString; locale="japanese") -> Date
d
の日付文字列をformat
文字列で指定されたパターンに従って解析することで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-02
Dates.Date
— MethodDate(d::AbstractString, df::DateFormat=ISODateFormat) -> Date
d
の日付文字列を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...) -> Time
Period
型の部分から 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) -> Time
DateTime
をTime
に変換します。DateTime
の時間、分、秒、ミリ秒の部分が新しいTime
を作成するために使用されます。マイクロ秒とナノ秒はデフォルトでゼロです。
Dates.Time
— MethodTime(t::AbstractString, format::AbstractString; locale="english") -> Time
t
時間文字列を 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:00
Dates.Time
— MethodTime(t::AbstractString, df::DateFormat=ISOTimeFormat) -> Time
t
日付時刻文字列を DateFormat
オブジェクトで指定されたパターンに従って解析することによって Time
を構築します。省略した場合は、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.864
Base.eps
— Methodeps(::Type{DateTime}) -> ミリ秒
eps(::Type{Date}) -> 日
eps(::Type{Time}) -> ナノ秒
eps(::TimeType) -> 期間
# 例
jldoctest julia> eps(DateTime) 1 ミリ秒
julia> eps(Date) 1 日
julia> eps(Time) 1 ナノ秒 ```
Accessor Functions
Dates.year
— Functionyear(dt::TimeType) -> Int64
Date
または DateTime
の年を Int64
として返します。
Dates.month
— Functionmonth(dt::TimeType) -> Int64
Date
または DateTime
の月を Int64
として返します。
Dates.week
— Functionweek(dt::TimeType) -> Int64
Date
または DateTime
の ISO週日付 を 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
Dates.day
— Functionday(dt::TimeType) -> Int64
Date
または DateTime
の月の日を Int64
として返します。
Dates.hour
— Functionhour(dt::DateTime) -> Int64
DateTime
の時刻をInt64
として返します。
hour(t::Time) -> Int64
Time
の時間をInt64
として返します。
Dates.minute
— Functionminute(dt::DateTime) -> Int64
DateTime
の分をInt64
として返します。
minute(t::Time) -> Int64
Time
の分をInt64
として返します。
Dates.second
— Functionsecond(dt::DateTime) -> Int64
DateTime
の秒をInt64
として返します。
second(t::Time) -> Int64
Time
の秒をInt64
として返します。
Dates.millisecond
— Functionmillisecond(dt::DateTime) -> Int64
DateTime
のミリ秒をInt64
として返します。
millisecond(t::Time) -> Int64
Time
のミリ秒をInt64
として返します。
Dates.microsecond
— Functionmicrosecond(t::Time) -> Int64
Time
のマイクロ秒をInt64
として返します。
Dates.nanosecond
— Functionnanosecond(t::Time) -> Int64
Time
のナノ秒を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) -> Hour
DateTimeの時間部分をHour
として返します。
Dates.Minute
— MethodMinute(dt::DateTime) -> Minute
DateTimeの分の部分をMinute
として返します。
Dates.Second
— MethodSecond(dt::DateTime) -> Second
DateTimeの秒の部分をSecond
として返します。
Dates.Millisecond
— MethodMillisecond(dt::DateTime) -> Millisecond
DateTimeのミリ秒部分をMillisecond
として返します。
Dates.Microsecond
— MethodMicrosecond(dt::Time) -> Microsecond
Timeのマイクロ秒部分をMicrosecond
として返します。
Dates.Nanosecond
— MethodNanosecond(dt::Time) -> Nanosecond
Timeのナノ秒部分を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="japanese") -> String
dayname(day::Integer; locale="japanese") -> String
与えられた locale
における Date
または DateTime
の曜日に対応する完全な曜日名を返します。整数も受け付けます。
例
julia> dayname(Date("2000-01-01"))
"土曜日"
julia> dayname(4)
"木曜日"
Dates.dayabbr
— Functiondayabbr(dt::TimeType; locale="japanese") -> String
dayabbr(day::Integer; locale="japanese") -> String
与えられた locale
における Date
または DateTime
の曜日に対応する略称を返します。Integer
も受け付けます。
例
julia> dayabbr(Date("2000-01-01"))
"土"
julia> dayabbr(3)
"水"
Dates.dayofweek
— Functiondayofweek(dt::TimeType) -> Int64
曜日をInt64
として返します。1 = 月曜日, 2 = 火曜日, など。
例
julia> dayofweek(Date("2000-01-01"))
6
Dates.dayofmonth
— Functiondayofmonth(dt::TimeType) -> Int64
Date
または DateTime
の月の日を Int64
として返します。
Dates.dayofweekofmonth
— Functiondayofweekofmonth(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
Dates.daysofweekinmonth
— Functiondaysofweekinmonth(dt::TimeType) -> Int
dt
の曜日に対して、その月におけるその曜日の合計数を返します。4または5を返します。月の最終週の日を指定するために、調整関数にdayofweekofmonth(dt) == daysofweekinmonth(dt)
を含めることで、時間的表現に役立ちます。
例
julia> daysofweekinmonth(Date("2005-01-01"))
5
julia> daysofweekinmonth(Date("2005-01-04"))
4
Dates.monthname
— Functionmonthname(dt::TimeType; locale="日本語") -> String
monthname(month::Integer, locale="日本語") -> String
指定されたlocale
でDate
またはDateTime
またはInteger
の月のフルネームを返します。
例
julia> monthname(Date("2005-01-04"))
"1月"
julia> monthname(2)
"2月"
Dates.monthabbr
— Functionmonthabbr(dt::TimeType; locale="日本語") -> String
monthabbr(month::Integer, locale="日本語") -> String
指定されたlocale
でのDate
またはDateTime
またはInteger
の省略形の月名を返します。
例
julia> monthabbr(Date("2005-01-04"))
"1月"
julia> monthabbr(2)
"2月"
Dates.daysinmonth
— Functiondaysinmonth(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
Dates.isleapyear
— Functionisleapyear(dt::TimeType) -> Bool
dt
の年がうるう年であればtrue
を返します。
例
julia> isleapyear(Date("2004"))
true
julia> isleapyear(Date("2005"))
false
Dates.dayofyear
— Functiondayofyear(dt::TimeType) -> Int
dt
の年の日を返します。1月1日が1日目です。
Dates.daysinyear
— Functiondaysinyear(dt::TimeType) -> Int
dt
の年がうるう年であれば366を返し、そうでなければ365を返します。
例
julia> daysinyear(1999)
365
julia> daysinyear(2000)
366
Dates.quarterofyear
— Functionquarterofyear(dt::TimeType) -> Int
dt
が属する四半期を返します。値の範囲は 1:4 です。
Dates.dayofquarter
— Functiondayofquarter(dt::TimeType) -> Int
dt
の現在の四半期の日を返します。値の範囲は1:92です。
Adjuster Functions
Base.trunc
— Methodtrunc(dt::TimeType, ::Type{Period}) -> TimeType
指定されたPeriod
型に従ってdt
の値を切り捨てます。
例
julia> trunc(DateTime("1996-01-01T12:30:00"), Day)
1996-01-01T00:00:00
Dates.firstdayofweek
— Functionfirstdayofweek(dt::TimeType) -> TimeType
dt
をその週の月曜日に調整します。
例
julia> firstdayofweek(DateTime("1996-01-05T12:30:00"))
1996-01-01T00:00:00
Dates.lastdayofweek
— Functionlastdayofweek(dt::TimeType) -> TimeType
dt
をその週の日曜日に調整します。
例
julia> lastdayofweek(DateTime("1996-01-05T12:30:00"))
1996-01-07T00:00:00
Dates.firstdayofmonth
— Functionfirstdayofmonth(dt::TimeType) -> TimeType
dt
をその月の初日に調整します。
例
julia> firstdayofmonth(DateTime("1996-05-20"))
1996-05-01T00:00:00
Dates.lastdayofmonth
— Functionlastdayofmonth(dt::TimeType) -> TimeType
dt
をその月の最終日に調整します。
例
julia> lastdayofmonth(DateTime("1996-05-20"))
1996-05-31T00:00:00
Dates.firstdayofyear
— Functionfirstdayofyear(dt::TimeType) -> TimeType
dt
をその年の最初の日に調整します。
例
julia> firstdayofyear(DateTime("1996-05-20"))
1996-01-01T00:00:00
Dates.lastdayofyear
— Functionlastdayofyear(dt::TimeType) -> TimeType
dt
をその年の最終日に調整します。
例
julia> lastdayofyear(DateTime("1996-05-20"))
1996-12-31T00:00:00
Dates.firstdayofquarter
— Functionfirstdayofquarter(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
Dates.lastdayofquarter
— Functionlastdayofquarter(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
Dates.tonext
— Methodtonext(dt::TimeType, dow::Int; same::Bool=false) -> TimeType
dt
をdow
に対応する次の曜日に調整します。1 = 月曜日、2 = 火曜日、など
。same=true
を設定すると、現在のdt
を次のdow
として考慮し、調整が行われないようにします。
Dates.toprev
— Methodtoprev(dt::TimeType, dow::Int; same::Bool=false) -> TimeType
dt
をdow
に対応する前の曜日に調整します。1 = 月曜日、2 = 火曜日、など
。same=true
を設定すると、現在のdt
を前のdow
として考慮し、調整が行われないようにします。
Dates.tofirst
— Functiontofirst(dt::TimeType, dow::Int; of=Month) -> TimeType
dt
をその月の最初のdow
に調整します。代わりに、of=Year
を指定すると、年の最初のdow
に調整されます。
Dates.tolast
— Functiontolast(dt::TimeType, dow::Int; of=Month) -> TimeType
dt
をその月の最後のdow
に調整します。あるいは、of=Year
を指定すると、年の最後のdow
に調整されます。
Dates.tonext
— Methodtonext(func::Function, dt::TimeType; step=Day(1), limit=10000, same=false) -> TimeType
dt
を調整し、func
がtrue
を返すまで、最大limit
回の反復をstep
の増分で行います。func
は単一のTimeType
引数を受け取り、Bool
を返す必要があります。same
はdt
がfunc
を満たすのに考慮されることを許可します。
Dates.toprev
— Methodtoprev(func::Function, dt::TimeType; step=Day(-1), limit=10000, same=false) -> TimeType
dt
を調整し、func
がtrue
を返すまで、最大limit
回の反復をstep
の増分で行います。func
は単一のTimeType
引数を受け取り、Bool
を返す必要があります。same
はdt
がfunc
を満たすことを考慮することを許可します。
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) -> CompoundPeriod
Period
のVector
から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
Dates.canonicalize
— Functioncanonicalize(::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
Dates.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
を返します。
この関数は Julia 1.7 以降が必要です。
Rounding Functions
Date
と DateTime
の値は、floor
、ceil
、または round
を使用して指定された解像度(例:1か月または15分)に丸めることができます。
Base.floor
— Methodfloor(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
Base.ceil
— Methodceil(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
Base.round
— Methodround(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
(デフォルト)、RoundDown
(floor
)、およびRoundUp
(ceil
)です。
ほとんどの Period
値は、指定された解像度に丸めることもできます:
Base.floor
— Methodfloor(x::Period, precision::T) where T <: Union{TimePeriod, Week, Day} -> T
x
を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 day
Month
やYear
のprecision
への切り捨てはサポートされていません。これらのPeriod
は長さが不一致だからです。
Base.ceil
— Methodceil(x::Period, precision::T) where T <: Union{TimePeriod, Week, Day} -> T
x
を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 days
Month
やYear
のprecision
への切り上げはサポートされていません。これらのPeriod
は長さが不一致だからです。
Base.round
— Methodround(x::Period, precision::T, [r::RoundingMode]) where T <: Union{TimePeriod, Week, Day} -> T
x
を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 days
round(::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
のfloor
とceil
を解像度p
で同時に返します。個別に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() -> Date
now()
の日時部分を返します。
Dates.unix2datetime
— Functionunix2datetime(x) -> DateTime
UNIXエポック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.ISOTimeFormat
時間のISO8601フォーマットを説明します。これは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
Date
andDateTime
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.