Dates
Dates
モジュールは日時を扱うための型を二つ提供します: 日単位の精度を持つ Date
と、ミリ秒単位の精度を持つ DateTime
です。この二つの型は両方とも抽象型 TimeType
の部分型です。型を区別する理由は簡単で、精度の細かい値を無視できるとコードが書きやすく、理解も簡単になるためです。例えば Date
は最小単位を一日とする (時・分・秒は考えない) ことが最初から決まっているので、タイムゾーン・夏時間・うるう秒は問題とならず、実装せずに済みます。
Date
と DateTime
はどちらも基本的に Int64
のラッパーです。二つの型が持つ唯一のフィールド instant
は実際には UTInstant{P}
という型であり、この型は世界時秒 (UT second) に基づいて途切れることなく増加するマシンの時間軸を表します1。DateTime
型はタイムゾーンを認識しないので、Python の用語で言えば "ナイーブ" であり、Java 8 の LocalDateTime
と同様です。タイムゾーンに関する機能が必要な場合は、IANA タイムゾーンデータベースを内蔵した TimeZones.jl パッケージを利用してください。
Date
と DateTime
はどちらも先発グレゴリオ暦 (proleptic Gregorian calendar) に従う ISO 8601 規格に基づいています。ISO 8601 規格は紀元前 (BC/BCE) の扱いが特殊なので注意が必要です。通常の暦では紀元前の最後の日 1-12-31 の次の日は紀元 1-1-1 であり、ゼロ年は存在しません。しかし ISO 8601 規格は紀元前元年をゼロ年と規定しているので、0001-01-01
の前の日は 0000-12-31
となります。また -0001
年 (負の 1 に対応する年) は紀元前二年であり、-0002
年が紀元前三年となります。
コンストラクタ
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
のパースはフォーマット文字列を使って実現されます。フォーマット文字列は時刻要素を示す "スロット" をいくつか定義することで構築され、スロットには区切られたスロットと固定幅のスロットの二つがあります。パースする文字列とフォーマット文字列を Date("2015-01-01","y-m-d")
や DateTime("20150101","yyyymmdd")
などとして Date
や DateTime
のコンストラクタに渡すとオブジェクトが構築されます。
区切られたスロットを定義するには、隣り合う二つの時刻要素の区切り文字としてパーサーが認識すべき文字を指定します。例えば "y-m-d"
というフォーマット文字列を与えると、パーサーは処理対象の文字列 (例えば "2014-07-16"
) に含まれる一つ目のスロットと二つ目のスロットの間には -
が見つかるはずだと理解します。y
, m
, d
は各スロットがどの時刻要素に対応するかをパーサーに伝えます。
固定幅のスロットを定義するには、時刻要素を表す文字を対応する幅と同じ個数だけ続けて書きます。例えば "yyyymmdd"
というフォーマット文字列は "20140716"
のような時刻を表す文字列に対応します。パーサーは区切り文字が無いときに固定幅スロットを認識します。
テキスト形式の月のパースも u
と U
でサポートされます。デフォルトでは英語の月の名前だけがサポートされ、u
は "Jan"
, "Feb"
, "Mar"
といった省略形を、U
は "January"
, "February"
, "March"
といった完全な形を表します。DateTime
が使うロケールを変更するには、Dates.LOCALES
という Dict{String,Dates.DateLocale}
型の辞書にロケールを登録した上で関数のキーワード引数 locale
にそのロケールを指定します2。整数を文字列に対応付ける dayname
や monthname
といった関数でも同様です。
パースのパフォーマンスについて: コンストラクタを何度か呼ぶだけであれば Date(date_string, "format_string")
の形式を使っても問題ありません。しかし同じフォーマット文字列を使って何度もパースをするときは、生のフォーマット文字列ではなく事前に作成した Dates.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
フォーマット文字列の作成では文字列マクロ dateformat"..."
も利用できます。このマクロは展開されるときに DateFormat
オブジェクトを一度だけ生成するので、このマクロを含むコードが複数回実行されても構築の手間がかさむことはありません:
julia> for i = 1:10^5
Date("2015-01-01", dateformat"y-m-d")
end
フォーマット文字列のパースに関するテストと例は stdlib/Dates/test/io.jl
にあります。
期間/比較
Date
と DateTime
は内部でそれぞれ UTInstant{Day}
と UTInstant{Millisecond}
で表現されるので、同じ型を持つ二つの値の間の長さは容易に計算できます。二つの Date
間の間隔は Day
の個数であり、二つの DateTime
の間の間隔は Millisecond
の個数です。同様に、抽象型 TimeType
の部分型に対する比較は内部のマシン時刻 (Int64
) を比較するだけで行えます:
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
アクセッサ関数
Date
型と DateTime
型は単一の Int64
として格納されるので、日時 (フィールド) はアクセッサ関数を通して取得します。小文字のアクセッサはフィールドを整数として返します:
julia> t = Date(2014, 1, 31)
2014-01-31
julia> Dates.year(t)
2014
julia> Dates.month(t)
1
julia> Dates.week(t)
5
julia> Dates.day(t)
31
大文字のアクセッサは対応する Period
型を返します:
julia> Dates.Year(t)
2014 years
julia> Dates.Day(t)
31 days
いくつかのフィールドの取得を合成したメソッドも提供されます。複数のフィールドが一度に必要な場合はこちらを使うと効率が向上します:
julia> Dates.yearmonth(t)
(2014, 1)
julia> Dates.monthday(t)
(1, 31)
julia> Dates.yearmonthday(t)
(2014, 1, 31)
内部の UTInstant
および整数値へのアクセスも可能です:
julia> dump(t)
Date
instant: Dates.UTInstant{Day}
periods: Day
value: Int64 735264
julia> t.instant
Dates.UTInstant{Day}(Day(735264))
julia> Dates.value(t)
735264
クエリ関数
クエリ関数は TimeType
型の値のカレンダーに関する情報を提供します。例えば曜日に関する情報を取得できます:
julia> t = Date(2014, 1, 31)
2014-01-31
julia> Dates.dayofweek(t)
5
julia> Dates.dayname(t)
"Friday"
julia> Dates.dayofweekofmonth(t) # 2014 年 1 月 31 日は第五金曜日
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
曜日や月の省略形を取得する関数 dayabbr
, monthabbr
もあります。
dayname
や monthname
に省略可能なキーワード引数 locale
を渡すと、他の言語/ロケールにおける曜日と月の名前を使うことができます。ロケールを使うには、まず対応付けを変数 LOCALES
に追加します:
julia> french_months = ["janvier", "février", "mars", "avril", "mai", "juin",
"juillet", "août", "septembre", "octobre", "novembre",
"décembre"];
julia> french_monts_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_monts_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
で local
を "french"
とするとエラーになります:
julia> Dates.dayabbr(t;locale="french")
ERROR: BoundsError: attempt to access 1-element Array{String,1} at index [5]
Stacktrace:
[...]
TimeType
と Period
の算術
日時と期間の算術には注意を要する細かな点があるので、どんな言語や日時フレームワークを使うのであれ、この算術がどのように行われるのかを確認しておくべきです (ただ一日単位の精度を持つ型では扱いがずっと簡単になります)。
Julia の Dates
モジュールは Period
が絡む算術で「変更をなるべく小さくする」という単純な原則に従ったアプローチを採用します。これはカレンダー式算術 (calendrical arithmetic) と呼ばれる方法であり、普段の会話で行われる計算とだいたい同じです。
日付を使った計算の何がそんなに難しいのでしょうか? 一つ簡単な例を考えましょう: 2014 年 1 月 31 日に一か月を足したとき、答えは? JavaScript は 3 月 3 日 を答えます (つまり一か月を 31 日とした計算です)。また PHP によると3 月 2 日 です (一か月は 30 日とされます)。実を言えば、この問題に正しい答えはありません。Julia の Dates
モジュールは 2 月 28 日を答えます。Dates
がこの答えを計算する方法を説明するために、カジノにあるスロットマシンを考えます。
このスロットマシンには 1 から 9 の数字が三つ並ぶのではなく、年-月-日を表す三つの数字が並びます。上の例では 2014-01-31 です。この日付に一か月を足すときは、まず月の列を 1 進めて 2014-02-31 とします。そして日の値が新しい月の最後の日より大きくなっていないかどうかを判定します。もし (今考えている例のように) 大きくなっているなら、日を最後の正当な日 (28) に調整し、それを計算結果とします。
このやり方が予期しない結果を生むことはあるでしょうか? さらに一か月を足してみてください: 2014-02-28 + Month(1) == 2014-03-28
です。三月の最後の日が得られるのが正しいのではないかと思ったなら、スロットマシンを思い出してください。変更される列の数はなるべく小さくなります。つまり月の列を一つ大きくした 2014-03-28 が正当な日付なので、計算はそこで終了します。一方で最初の日付 2014-01-31 に二か月を足すと、予想通り 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 月 29 日に一日を足されて 2014-01-30 となり、それから一か月が足されて 2014-02-30 となり、これが調整されて 2014-02-28 となります。二つ目の例では一か月が最初に足されることで 2014-02-29 となり、これが 2014-02-28 に調整され、それから一日が足されて 2014-03-01 となります。この問題に対応するために用意されている設計が、算術に複数の Period
が含まれる場合は、Period
の位置ではなく型に基づいて演算が並べられるというものです。つまり 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
を初めて使うユーザーが知っておく必要があるのは「月を扱うときに明示的に連結性を指定すると予期せぬ結果が生じる可能性がある」ことだけであり、それ以外は全て期待通りに動作します。幸いなことに、世界時を使った日時と期間の算術で生じる奇妙なケースはこれでほぼ全てです (うるう秒や夏時間といった "お楽しみ" はありません)。
この設計のボーナスとして、期間の算術で使えるオブジェクトは区間に対しても全てそのまま動作します:
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 Array{Date,1}:
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 Array{Date,1}:
2014-01-29
2014-02-28
2014-03-29
2014-04-29
2014-05-29
2014-06-29
2014-07-29
アジャスター関数
日時と期間の算術は便利ですが、日時に対して行いたい計算が固定された期間ではなく "カレンダーを使った" あるいは "時間的な" 性質を持つこともあります。祝日はこのような計算の完璧な例です: 多くの祝日は「戦没将兵追悼記念日 = 五月の最終月曜日」や「感謝祭 = 十一月の第四木曜日」といった規則を持ちます。こういった時間的な表現では「月の最初/最後の日」「次の木曜日」「第一/第三水曜日」といったカレンダーを基準とした相対的な規則が使われています。
Dates
モジュールは時間的な規則を簡単かつ十分に表現するための便利なメソッドを通してアジャスター (adjuster) API を提供します。アジャスター関数の一つ目のグループは、週・月・四半期の最初および最後を扱うものです。それぞれ単一の TimeType
を受け取り、それが属する指定された期間における最初もしくは最後の日 (調整された日付) を返します:
julia> # 入力を同じ週の月曜日に調整する。
Dates.firstdayofweek(Date(2014,7,16))
2014-07-14
julia> # 入力を同じ月の最後の日に調整する。
Dates.lastdayofmonth(Date(2014,7,16))
2014-07-31
julia> # 入力を同じ四半期の最後の日に調整する。
Dates.lastdayofquarter(Date(2014,7,16))
2014-09-30
二つ目のグループに属する二つの高階関数 tonext
, toprev
は時間的な表現の扱いを一般化します。これらの関数は DateFunction
を第一引数に受け取り、その次に調整を行う TimeType
が続きます。DateFunction
は TimeType
を受け取って Bool
を返すただの関数 (たいていは無名関数) であり、調整が完了しているかどうかを判定します。tonext
と toprev
の使用例を示します:
julia> # x が火曜日なら true を返す。
istuesday = x->Dates.dayofweek(x) == Dates.Tuesday;
julia> Dates.tonext(istuesday, Date(2014,7,13)) # 2014-07-13 は日曜日
2014-07-15
julia> # 利便性のため、曜日に対するメソッドは提供される。
Dates.tonext(Date(2014,7,13), Dates.Tuesday)
2014-07-15
時間的な表現がもっと複雑なときは、do ブロックを使った記法が便利です:
julia> Dates.tonext(Date(2014,7,13)) do x
# 11月の第四木曜日 (感謝祭の日) に対して true を返す。
Dates.dayofweek(x) == Dates.Thursday &&
Dates.dayofweekofmonth(x) == 4 &&
Dates.month(x) == Dates.November
end
2014-11-27
Base.filter
メソッドを使えば、特定の範囲に含まれる正当な日時/瞬間を全て取得できます:
# ピッツバーグの道路清掃: 四月から十一月までの毎月第二火曜日
# 日付の範囲は 2014 年 1 月 1 日から 2015 年 1 月 1 日まで
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 Array{Date,1}:
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
型
期間 (period) は人間の視点で区切られた時間の区間であり、期間が表す範囲がいつも同じとは限りません。例えば一か月という期間が表す日数は、年と月に応じて 28, 29, 30, 31 のいずれかとなります。また一年という期間はうるう年かどうかに応じて 365 日もしくは 366 日を表します。Period
型は Int64
の単純なラッパーであり、Int64
に変換可能な任意の型から構築できます。例えば Year(1)
や Month(3.0)
とします。同じ Period
同士の算術は整数と同様に振る舞い、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) # 整数の除算と同様
3 years
julia> Dates.value(Dates.Millisecond(10))
10
丸め
floor
, ceil
, round
を使うと、Date
と DateTime
を指定した分解能 (例えば一か月や十五分) で丸めることができます:
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
型に対する round
は RoundNearestTiesUp
の丸めモードを使います (TimeType
型の "偶数" が何を意味するのかを決定するのは困難です)。RoundingMode
に関する詳細は API リファレンスにあります。
丸めは基本的に予想通りの振る舞いをするはずですが、期待される振る舞いが自明でない場合がいくつかあります。
丸めエポック
多くの場合、丸めの分解能に指定される値 (例えば Dates.Second(30)
) はその次に大きな期間 (Dates.Minute(1)
) を等分します。しかしこの条件が成り立たないと、丸めで混乱が生じます。例えば DateTime
を最も近い十時間の倍数に丸めた値とは何を意味するのでしょうか? 試してみましょう:
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 の Date
の内部表現は Rata Die を使っているので、実際はこの説明と少し異なります。ただエンドユーザーは 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 が定義するゼロ年が持つ最初の「週の最初の日」) が丸めの基準として使われます。
期待される振る舞いが必ずしも自明でない似たケースがもう一つあります: 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
Hour(2)
と Minute(2)
はそれぞれ一つ大きい単位を等分するので、丸めの結果は明らかに分かります。しかし Month(2)
を使った場合には、これも一つ大きな単位を等分するにもかかわらず、驚くような結果が得られます:
julia> round(DateTime(2016, 7, 17, 8, 55, 30), Dates.Month(2))
2016-07-01T00:00:00
7 は奇数なのに、どうして七番目の月 July
へ丸められたのでしょうか? ここでの鍵は、0 から始まる時・分・秒・ミリ秒とは異なり、月が 1 始まりであるという事実です (最初の月は 1 月です)。
これは、偶数の秒・分・時・年 (ISO 8601 規格はゼロ年を含むため) への DateTime
の丸めが、そのフィールドが偶数の DateTime
を生成することを意味します。これに対して偶数の月への DateTime
の丸めは月のフィールドが奇数の DateTime
を生成します。月と年に含まれる日の個数は一定でないので、偶数の日へ丸めたときに結果の日のフィールドが偶数になるか奇数になるかは定まりません。
Dates
モジュールがエクスポートするメソッドに関する追加の情報は API リファレンスを参照してください。
API リファレンス
日時と時刻の型
Dates.Period
── 型
Period
Year
Month
Week
Day
Hour
Minute
Second
Millisecond
Microsecond
Nanosecond
Period
型は人間が自然に扱える離散的な時間の範囲を表します。
Dates.CompoundPeriod
── 型
CompoundPeriod
CompoundPeriod
は小さい単位の定数倍でない期間を表すときに使われます。例えば「一年と一日」は一日の定数倍ではありませんが、CompoundPeriod
を使えば表現できます。実は異なる期間型を足すと自動的に CompoundPeriod
が生成されます。例えば Year(1) + Day(1)
の結果は CompoundPeriod
です。
Dates.Instant
── 型
Dates.UTInstant
── 型
UTInstant{T}
UTInstant
は世界時に基づいたマシンの時間軸を表現します (一日 = 地球の自転一周)。T
は時刻の分解能あるいは精度を表す Period
型のパラメータです。
Dates.TimeType
── 型
Dates.DateTime
── 型
Dates.Date
── 型
Dates.Time
── 型
時刻に関する関数
Dates.DateTime
── メソッド
Dates.DateTime
── メソッド
Dates.DateTime
── メソッド
DateTime(f::Function, y[, m, d, h, mi, s]; step=Day(1), limit=10000) -> DateTime
アジャスター API を通して DateTime
を作成します。与えられた引数 y
, m
, d
から開始地点が構築され、f::Function
が true
を返すまで調整されます。調整におけるステップサイズはキーワード引数 step
で指定できます。limit
はアジャスター API が行う反復の回数の上限であり、この回数まで実行が続く (f::Function
が true
を返さない) とエラーが送出されます。
例
julia> DateTime(dt -> Dates.second(dt) == 40, 2010, 10, 20, 10;
step = Dates.Second(1))
2010-10-20T10:00:40
julia> DateTime(dt -> Dates.hour(dt) == 20, 2010, 10, 20, 10;
step = Dates.Hour(1), limit = 5)
ERROR: ArgumentError: Adjustment limit reached: 5 iterations
Stacktrace:
[...]
Dates.DateTime
── メソッド
Dates.DateTime
── メソッド
DateTime(dt::AbstractString, format::AbstractString; locale="english") -> DateTime
時刻を表す文字列 dt
をフォーマット文字列 format
で与えられるパターンに従ってパースし、DateTime
を構築します。
このメソッドは呼ばれるたびに DateFormat
オブジェクトを作成します。同じフォーマット文字列を使って時刻を表す文字列を大量にパースするなら、個別に作成した DateFormat
オブジェクトを第二引数に渡すようにしてください。
Dates.format
── メソッド
format(dt::TimeType, format::AbstractString; locale="english") -> AbstractString
与えられた format
を TimeType
オブジェクトに適用することで文字列を構築します。format
文字列で使えるコード文字は次の通りです:
コード | 例 | コメント |
---|---|---|
y |
6 |
年を数値として固定幅で表した文字列 |
Y |
1996 |
年を数値として最小の幅で表した文字列 |
m |
1 , 12 |
月を数値として最小の幅で表した文字列 |
u |
Jan |
キーワード引数 locale が定める月の名前の省略形 (三文字) |
U |
January |
キーワード引数 locale が定める完全な月の名前 |
d |
1 , 31 |
月における日を最小の幅で表した文字列 |
H |
0 , 23 |
時 (二十四時間表記) を最小の幅で表した文字列 |
M |
0 , 59 |
分を最小の幅で表した文字列 |
S |
0 , 59 |
秒を最小の幅で表した文字列 |
s |
000 , 500 |
ミリ秒を三文字以上の幅で表した文字列 |
e |
Mon , Tue |
曜日の省略形 |
E |
Monday |
曜日の完全な名前 |
文字列の幅はコード文字を連続させることで指定します。例えば yyyy-mm
というフォーマットはコード y
の幅が四文字でコード m
に幅が二文字であることを示します。数字を出力するコードには固定幅モードと最小幅モードの二つがあります。固定幅モードでは文字列が短ければ数字の左側にゼロを詰めることで幅が揃えられ、文字列が長ければ切り捨てられます。最小幅モードは基本的に固定幅モードと同じですが、幅が足りないときに文字列を切り捨てません。
format
を作成するときコードでない文字を区切り文字として利用できます。例えば "1996-01-15T00:00:00"
のようなフォーマットを得るには "yyyy-mm-ddTHH:MM:SS"
というフォーマット文字列を使います。コード文字をリテラルとして使うときはバックスラッシュでエスケープしてください。例えば "1996y01m"
は "yyyy\ymm\m"
というフォーマット文字列から得られます。
Dates.DateFormat
── 型
DateFormat(format::AbstractString, locale="english") -> DateFormat
日時文字列のパースや日時オブジェクトの文字列化で使用する日時フォーマットオブジェクトを構築します。文字列 format
では次のコード文字が利用できます:
コード | マッチ | コメント |
---|---|---|
y |
1996 , 96 |
年 1996 , 0096 を返す |
Y |
1996 , 96 |
年 1996 , 0096 を返す (y と等価) |
m |
1 , 01 |
月を表す一桁または二桁の数字とマッチする |
u |
Jan |
キーワード引数 locale が定める月の名前の省略形とマッチする |
U |
January |
キーワード引数 locale が定める月の完全な名前とマッチする |
d |
1 , 01 |
日を表す一桁または二桁の数字とマッチする |
H |
00 |
時 (二十四時間表記) とマッチする |
I |
00 |
時を十二時間表記で出力する |
M |
00 |
分とマッチする |
S |
00 |
秒とマッチする |
s |
.500 |
ミリ秒とマッチする |
e |
Mon , Tues |
曜日の名前の省略形とマッチする |
E |
Monday |
曜日の完全な名前とマッチする |
p |
AM |
AM /PM とマッチする (大文字と小文字は区別される) |
yyyymmdd |
19960101 |
固定幅の年・月・日とマッチする |
この表に載っていない文字は日時のスロットを区切る文字として扱われます。例えばマッチさせたい文字列が "1996-01-15T00:00:00.0"
なら、フォーマット文字列は "y-m-dTH:M:S.s"
とできます。コード文字を区切り文字として使うときはバックスラッシュでエスケープしてください。例えば "1995y01m"
は "y\ym\m"
というフォーマットを持ちます。
12:00AM は 00:00 (午前 0 時) であり、12:00PM は 12:00 (正午) を表すことに注意してください。p
指定子の付いた時刻をパースするとき時要素 (H
または I
) は必ず十二時間表記として扱われるので、I
は主に出力で利用されます。
DateFormat
オブジェクトの作成は時間のかかる処理です。可能な場合は必ず、オブジェクトを一度だけ作成して使い回すか文字列マクロ dateformat""
を使ってください。dateformat""
マクロを使うとマクロ展開時に DateFormat
オブジェクトが一度だけ作成され、後の実行ではそのオブジェクトが再利用されます。詳細は @dateformat_str
を参照してください。
DateFormat
オブジェクトを使った日時を表す文字列のパースについては DateTime
を、日時を表す文字列の出力については format
をそれぞれ参照してください。
Dates.@dateformat_str
── マクロ
dateformat"Y-m-d H:M:S"
DateFormat
オブジェクトを作成します。基本的に DateFormat("Y-m-d H:M:S")
と同様ですが、DateFormat
オブジェクトはマクロ展開時に一度だけ作成されます。
フォーマット指定子について詳しくは DateFormat
を参照してください。
Dates.DateTime
── メソッド
DateTime(dt::AbstractString, df::DateFormat) -> DateTime
DateFormat
オブジェクト df
が指定するパターンに従って、日時を表す文字列 dt
をパースして DateTime
を構築します。動作は DateTime(::AbstractString, ::AbstractString)
と同様ですが、同じフォーマットをした文字列を何度もパースするときにこのメソッドを使って事前に作成された DateFormat
オブジェクトを使い回すと効率が大きく向上します。
Dates.Date
── メソッド
Dates.Date
── メソッド
Dates.Date
── メソッド
Date(f::Function, y[, m, d]; step=Day(1), limit=10000) -> Date
アジャスター API を通して Date
を作成します。与えられた引数 y, m, d...
から開始地点が構築され、f::Function
が true
を返すまで調整されます。調整におけるステップサイズはキーワード引数 step
で指定できます。limit
はアジャスター API が行う反復の回数の上限であり、この回数まで実行が続く (f::Function
が true
を返さない) とエラーが送出されます。
例
julia> Date(date -> Dates.week(date) == 20, 2010, 01, 01)
2010-05-17
julia> Date(date -> Dates.year(date) == 2010, 2000, 01, 01)
2010-01-01
julia> Date(date -> Dates.month(date) == 10, 2000, 01, 01; limit = 5)
ERROR: ArgumentError: Adjustment limit reached: 5 iterations
Stacktrace:
[...]
Dates.Date
── メソッド
Date(dt::DateTime) -> Date
DateTime
を Date
に変換します。DateTime
の時・分・秒・ミリ秒の部分は切り捨てられ、年・月・日の部分だけが使われます。
Dates.Date
── メソッド
Date(d::AbstractString, format::AbstractString; locale="english") -> Date
フォーマット文字列 format
で与えられるパターンに従って日付を表す文字列 dt
をパースし、Date
を構築します。
このメソッドは呼ばれるたびに DateFormat
を作成します。もし同じフォーマットを使って日付を表す文字列を大量にパースするなら、個別に作成した DateFormat
を第二引数に渡すようにしてください。
Dates.Date
── メソッド
Date(d::AbstractString, df::DateFormat) -> Date
DateFormat
オブジェクト df
を使って日付を表す文字列 d
をパースし、Date
オブジェクトを作成します。
Dates.Time
── メソッド
Dates.Time
── メソッド
Dates.Time
── メソッド
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)
アジャスター API を通して Time
を作成します。与えられた引数 y, m, d...
から開始地点が構築され、f::Function
が true
を返すまで調整されます。調整におけるステップサイズはキーワード引数 step
で指定できます。limit
はアジャスター API が行う反復の回数の上限であり、この回数まで実行が続く (f::Function
が true
を返さない) とエラーが送出されます。デフォルトのステップは与えられた引数より高い精度になるように選ばれます: 例えば引数で時・分・秒を指定すると、デフォルトステップは Second(1)
ではなく Millisecond(1)
となります。
例
julia> Dates.Time(t -> Dates.minute(t) == 30, 20)
20:30:00
julia> Dates.Time(t -> Dates.minute(t) == 0, 20)
20:00:00
julia> Dates.Time(t -> Dates.hour(t) == 10, 3; limit = 5)
ERROR: ArgumentError: Adjustment limit reached: 5 iterations
Stacktrace:
[...]
Dates.Time
── メソッド
Time(dt::DateTime) -> Time
DateTime
を Time
に変換します。DateTime
の時・分・秒・ミリ秒が新しい Time
の作成に使われます。マイクロ秒とナノ秒はデフォルトでゼロです。
Dates.now
── メソッド
Dates.now
── メソッド
Base.eps
── 関数
eps(::Type{DateTime}) -> Millisecond
eps(::Type{Date}) -> Day
eps(::Type{Time}) -> Nanosecond
eps(::TimeType) -> Period
TimeType
がサポートする最小単位を返します。
例
julia> eps(DateTime)
1 millisecond
julia> eps(Date)
1 day
julia> eps(Time)
1 nanosecond
アクセッサ関数
Dates.year
── 関数
Dates.month
── 関数
Dates.week
── 関数
week(dt::TimeType) -> Int64
Date
あるいは DateTime
の ISO 週番号 (ISO week number) を Int64
として返します。一年で最初の週はその年最初の木曜日が含まれる週であることに注意してください。このため一月四日より前の日付が前年の週となる可能性があります。例えば 2005 年 1 月 1 日土曜日は 2004 年の 53 番目の週に含まれます。
例
julia> Dates.week(Date(1989, 6, 22))
25
julia> Dates.week(Date(2005, 1, 1))
53
julia> Dates.week(Date(2004, 12, 31))
53
Dates.day
── 関数
Dates.hour
── 関数
Dates.minute
── 関数
Dates.second
── 関数
Dates.millisecond
── 関数
Dates.microsecond
── 関数
Dates.nanosecond
── 関数
Dates.Year
── メソッド
Dates.Month
── メソッド
Dates.Week
── メソッド
Dates.Day
── メソッド
Dates.Hour
── メソッド
Dates.Minute
── メソッド
Dates.Second
── メソッド
Dates.Millisecond
── メソッド
Dates.Microsecond
── メソッド
Dates.Nanosecond
── メソッド
Dates.yearmonth
── 関数
Dates.monthday
── 関数
Dates.yearmonthday
── 関数
クエリ関数
Dates.dayname
── 関数
dayname(dt::TimeType; locale="english") -> String
dayname(day::Integer; locale="english") -> String
Date
あるいは DateTime
が表す曜日の locale
における完全な名前を返します。Integer
も受け付けます。
例
julia> Dates.dayname(Date("2000-01-01"))
"Saturday"
julia> Dates.dayname(4)
"Thursday"
Dates.dayabbr
── 関数
dayabbr(dt::TimeType; locale="english") -> String
dayabbr(day::Integer; locale="english") -> String
Date
あるいは DateTime
が表す曜日の locale
における名前の省略形を返します。Integer
も受け付けます。
例
julia> Dates.dayabbr(Date("2000-01-01"))
"Sat"
julia> Dates.dayabbr(3)
"Wed"
Dates.dayofweek
── 関数
Dates.dayofmonth
── 関数
Dates.dayofweekofmonth
── 関数
dayofweekofmonth(dt::TimeType) -> Int
dt
の月で dt
の曜日が何回目かを返します。例えば dt
が月曜日なら、返り値 1
は dt
が第一月曜日であることを示し、返り値 2
は dt
が第二月曜日であることを示します。返り値は 1:5
の区間に含まれます。
例
julia> Dates.dayofweekofmonth(Date("2000-02-01"))
1
julia> Dates.dayofweekofmonth(Date("2000-02-08"))
2
julia> Dates.dayofweekofmonth(Date("2000-02-15"))
3
Dates.daysofweekinmonth
── 関数
daysofweekinmonth(dt::TimeType) -> Int
dt
の曜日が dt
の月に何回あるかを返します。返り値は 4
または 5
です。アジャスター関数で dayofweekofmonth(dt) == daysofweekinmonth(dt)
とすれば月の最後の曜日を指定できるので、この関数は時間的な表現で有用です。
例
julia> Dates.daysofweekinmonth(Date("2005-01-01"))
5
julia> Dates.daysofweekinmonth(Date("2005-01-04"))
4
Dates.monthname
── 関数
monthname(dt::TimeType; locale="english") -> String
monthname(month::Integer, locale="english") -> String
Date
/DateTime
/Integer
が表す月の locale
における完全な名前を返します。
例
julia> Dates.monthname(Date("2005-01-04"))
"January"
julia> Dates.monthname(2)
"February"
Dates.monthabbr
── 関数
monthabbr(dt::TimeType; locale="english") -> String
monthabbr(month::Integer, locale="english") -> String
Date
/DateTime
/Integer
が表す月の locale
における名前の省略形を返します。
例
julia> Dates.monthabbr(Date("2005-01-04"))
"Jan"
julia> monthabbr(2)
"Feb"
Dates.daysinmonth
── 関数
daysinmonth(dt::TimeType) -> Int
dt
が属する月の日数を返します。返り値は 28
, 29
, 30
, 31
のどれかです。
例
julia> Dates.daysinmonth(Date("2000-01"))
31
julia> Dates.daysinmonth(Date("2001-02"))
28
julia> Dates.daysinmonth(Date("2000-02"))
29
Dates.isleapyear
── 関数
isleapyear(dt::TimeType) -> Bool
dt
が属する年がうるう年なら true
を返します。
例
julia> Dates.isleapyear(Date("2004"))
true
julia> Dates.isleapyear(Date("2005"))
false
Dates.dayofyear
── 関数
Dates.daysinyear
── 関数
daysinyear(dt::TimeType) -> Int
dt
がうるう年に属するなら 366
を、そうでなければ 365
を返します。
例
julia> Dates.daysinyear(1999)
365
julia> Dates.daysinyear(2000)
366
Dates.quarterofyear
── 関数
Dates.dayofquarter
── 関数
アジャスター関数
Base.trunc
── メソッド
trunc(dt::TimeType, ::Type{Period}) -> TimeType
与えられた Period
型の値を使って dt
を切り捨てます。
例
julia> trunc(Dates.DateTime("1996-01-01T12:30:00"), Dates.Day)
1996-01-01T00:00:00
Dates.firstdayofweek
── 関数
firstdayofweek(dt::TimeType) -> TimeType
dt
を同じ週の月曜日に調整します。
例
julia> Dates.firstdayofweek(DateTime("1996-01-05T12:30:00"))
1996-01-01T00:00:00
Dates.lastdayofweek
── 関数
lastdayofweek(dt::TimeType) -> TimeType
dt
を同じ週の日曜日に調整します。
例
julia> Dates.lastdayofweek(DateTime("1996-01-05T12:30:00"))
1996-01-07T00:00:00
Dates.firstdayofmonth
── 関数
firstdayofmonth(dt::TimeType) -> TimeType
dt
を同じ月の最初の日に調整します。
例
julia> Dates.firstdayofmonth(DateTime("1996-05-20"))
1996-05-01T00:00:00
Dates.lastdayofmonth
── 関数
lastdayofmonth(dt::TimeType) -> TimeType
dt
を同じ月の最後の日に調整します。
例
julia> Dates.lastdayofmonth(DateTime("1996-05-20"))
1996-05-31T00:00:00
Dates.firstdayofyear
── 関数
firstdayofyear(dt::TimeType) -> TimeType
dt
を同じ年の最初の日に調整します。
例
julia> Dates.firstdayofyear(DateTime("1996-05-20"))
1996-01-01T00:00:00
Dates.lastdayofyear
── 関数
lastdayofyear(dt::TimeType) -> TimeType
dt
を同じ年の最後の日に調整します。
例
julia> Dates.lastdayofyear(DateTime("1996-05-20"))
1996-12-31T00:00:00
Dates.firstdayofquarter
── 関数
firstdayofquarter(dt::TimeType) -> TimeType
dt
を同じ四半期の最初の日に調整します。
例
julia> Dates.firstdayofquarter(DateTime("1996-05-20"))
1996-04-01T00:00:00
julia> Dates.firstdayofquarter(DateTime("1996-08-20"))
1996-07-01T00:00:00
Dates.lastdayofquarter
── 関数
lastdayofquarter(dt::TimeType) -> TimeType
dt
を同じ四半期の最後の日に調整します。
例
julia> Dates.lastdayofquarter(DateTime("1996-05-20"))
1996-06-30T00:00:00
julia> Dates.lastdayofquarter(DateTime("1996-08-20"))
1996-09-30T00:00:00
Dates.tonext
── メソッド
tonext(dt::TimeType, dow::Int;
same::Bool=false) -> TimeType
dt
を次の dow
曜日に調整します。曜日は 1 = 月曜日
, 2 = 火曜日
, ... のように指定されます。same=true
とすると現在の dt
が次の dow
曜日とみなされ、調整せずに dt
をそのまま返すことが許可されます。
Dates.toprev
── メソッド
toprev(dt::TimeType, dow::Int;
same::Bool=false) -> TimeType
dt
を前の dow
曜日とします。曜日は 1 = 月曜日
, 2 = 火曜日
, ... のように指定されます。same=true
とすると現在の dt
が前の dow
曜日とみなされ、調整せずに dt
をそのまま返すことが許可されます。
Dates.tofirst
── 関数
tofirst(dt::TimeType, dow::Int; of=Month) -> TimeType
dt
を同じ月の最初の dow
曜日に調整します。of=Year
とすると同じ年の最初の dow
曜日に調整します。
Dates.tolast
── 関数
tolast(dt::TimeType, dow::Int; of=Month) -> TimeType
dt
を同じ月の最後の dow
曜日に調整します。of=Year
とすると同じ年の最後の dow
曜日に調整します。
Dates.tonext
── メソッド
Dates.toprev
── メソッド
期間
Dates.Period
── メソッド
Dates.CompoundPeriod
── メソッド
CompoundPeriod(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.value
── 関数
Dates.default
── 関数
default(p::Period) -> Period
入力された Period
の型に対する常識的な "デフォルト" 値を返します。Year
, Month
, Day
では T(1)
が返り、Hour
, Minute
, Second
, Millisecond
では T(0)
が返ります。
丸め関数
Date
と DateTime
に対する分解能 (例えば一か月や十五分) を指定した丸めは floor
, ceil
, round
で行います。
Base.floor
── メソッド
floor(dt::TimeType, p::Period) -> TimeType
分解能が p
のとき dt
以下の最も近い Date
または DateTime
を返します。
利便性のため、p
には値だけではなく型も指定できます: floor(dt, Dates.Hour)
は floor(dt, Dates.Hour(1))
の省略形です。
julia> floor(Date(1985, 8, 16), Dates.Month)
1985-08-01
julia> floor(DateTime(2013, 2, 13, 0, 31, 20), Dates.Minute(15))
2013-02-13T00:30:00
julia> floor(DateTime(2016, 8, 6, 12, 0, 0), Dates.Day)
2016-08-06T00:00:00
Base.ceil
── メソッド
ceil(dt::TimeType, p::Period) -> TimeType
分解能が p
のとき dt
以上の最も近い Date
または DateTime
を返します。
利便性のため、p
には値だけではなく型も指定できます: ceil(dt, Dates.Hour)
は ceil(dt, Dates.Hour(1))
の省略形です。
julia> ceil(Date(1985, 8, 16), Dates.Month)
1985-09-01
julia> ceil(DateTime(2013, 2, 13, 0, 31, 20), Dates.Minute(15))
2013-02-13T00:45:00
julia> ceil(DateTime(2016, 8, 6, 12, 0, 0), Dates.Day)
2016-08-07T00:00:00
Base.round
── メソッド
round(dt::TimeType, p::Period, [r::RoundingMode]) -> TimeType
分解能が p
のとき dt
に最も近い Date
または DateTime
を返します。デフォルトの丸めモードは RoundNearestTiesUp
であり、同着のとき (例えば 9:30 を一時間で丸めるとき) 上へ丸めます。
利便性のため、p
には値だけではなく型も指定できます: round(dt, Dates.Hour)
は round(dt, Dates.Hour(1))
の省略形です。
julia> round(Date(1985, 8, 16), Dates.Month)
1985-08-01
julia> round(DateTime(2013, 2, 13, 0, 31, 20), Dates.Minute(15))
2013-02-13T00:30:00
julia> round(DateTime(2016, 8, 6, 12, 0, 0), Dates.Day)
2016-08-07T00:00:00
round(::TimeType, ::Period, ::RoundingMode)
で利用できる正当な丸めモードは次の通りです:
RoundNearestTiesUp
(デフォルト)RoundDown
(floor
)RoundUp
(ceil
)
たいていの Period
型の値も指定した分解能に丸められます:
Base.floor
── メソッド
floor(x::Period, precision::T) where T <: Union{TimePeriod, Week, Day} -> T
x
を最も近い precision
の倍数へ切り捨てます。x
と precision
が異なる Period
の部分型である場合には、返り値は precision
と同じ型になります。
利便性のため、p
には値だけではなく型も指定できます: floor(dt, Dates.Hour)
は floor(dt, Dates.Hour(1))
の省略形です。
julia> floor(Dates.Day(16), Dates.Week)
2 weeks
julia> floor(Dates.Minute(44), Dates.Minute(15))
30 minutes
julia> floor(Dates.Hour(36), Dates.Day)
1 day
precision
を Month
および Year
とした丸めはサポートされません。そういった Period
は長さが一定でないためです。
Base.ceil
── メソッド
ceil(x::Period, precision::T) where T <: Union{TimePeriod, Week, Day} -> T
x
を最も近い precision
の倍数へ切り上げます。x
と precision
が異なる Period
の部分型である場合には、返り値は precision
と同じ型になります。
利便性のため、p
には値だけではなく型も指定できます: ceil(dt, Dates.Hour)
は ceil(dt, Dates.Hour(1))
の省略形です。
julia> ceil(Dates.Day(16), Dates.Week)
3 weeks
julia> ceil(Dates.Minute(44), Dates.Minute(15))
45 minutes
julia> ceil(Dates.Hour(36), Dates.Day)
2 days
precision
を Month
および Year
とした丸めはサポートされません。そういった Period
は長さが一定でないためです。
Base.round
── メソッド
round(x::Period,
precision::T,
[r::RoundingMode]) where T <: Union{TimePeriod, Week, Day} -> T
x
を最も近い precision
の倍数へ丸めます。x
と precision
が異なる Period
の部分型である場合には、返り値は precision
と同じ型になります。デフォルトの丸めモードは RoundNearestTiesUp
であり、同着のとき (例えば 90 分を最も近い一時間で丸めるとき) 切り上げます。
利便性のため、p
には値だけではなく型も指定できます: round(dt, Dates.Hour)
は round(dt, Dates.Hour(1))
の省略形です。
julia> round(Dates.Day(16), Dates.Week)
2 weeks
julia> round(Dates.Minute(44), Dates.Minute(15))
45 minutes
julia> round(Dates.Hour(36), Dates.Day)
2 days
round(::Period, ::T, ::RoundingMode)
に対する正当な丸めモードは次の通りです:
RoundNearestTiesUp
(デフォルト)RoundDown
(floor
)RoundUp
(ceil
)
precision
を Month
および Year
とした丸めはサポートされません。そういった Period
は長さが一定でないためです。
これ以降の関数はエクスポートされません:
Dates.floorceil
── 関数
floorceil(dt::TimeType, p::Period) -> (TimeType, TimeType)
Date
または DateTime
に対する分解能 p
の 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
── 関数
Dates.epochms2datetime
── 関数
epochms2datetime(milliseconds) -> DateTime
丸めエポック (0000-01-01T00:00:00
) からの経過ミリ秒数を受け取り、それに対応する DateTime
を返します。
Dates.date2epochdays
── 関数
Dates.datetime2epochms
── 関数
変換関数
Dates.today
── 関数
Dates.unix2datetime
── 関数
Dates.datetime2unix
── 関数
Dates.julian2datetime
── 関数
julian2datetime(julian_days) -> DateTime
ユリウス暦におけるエポック -4713-11-24T12:00:00
からの経過日数を受け取り、対応する DateTime
を返します。
Dates.datetime2julian
── 関数
Dates.rata2datetime
── 関数
rata2datetime(days) -> DateTime
Rata Die におけるエポック 0000-12-31T00:00:00
からの経過日数を受け取り、対応する DateTime
を返します。
Dates.datetime2rata
── 関数
datetime2rata(dt::TimeType) -> Int64
Rata Die におけるエポック 0000-12-31T00:00:00
から与えられた Date
あるいは DateTime
までの日数を返します。
定数
曜日:
変数 | 省略形 | 値 (Int ) |
---|---|---|
Monday |
Mon |
1 |
Tuesday |
Tue |
2 |
Wednesday |
Wed |
3 |
Thursday |
Thu |
4 |
Friday |
Fri |
5 |
Saturday |
Sat |
6 |
Sunday |
Sun |
7 |
月:
変数 | 省略形 | 値 (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 |
-
世界時秒 (UT second) という概念は非常に重要です。一般に二つの異なる概念が時刻として受け入れられています: 一つは物理的な地球の自転に基づく時刻 (一周 = 一日) で、もう一つは SI 秒 (固定された定数) に基づく時刻です。この二つは大きく異なります! 考えてみてください、地球の自転を使って相対的に定義される「世界時秒」は、日によって長さが異なる可能性があるのです! まぁとにかく、
Date
とDateTime
が世界時秒に基づいているという事実もまた、うるう秒やそれに付随する複雑な問題を避けるための仮定です。この時刻の基準はかつて UT あるいは UT1 と呼ばれました。世界時秒に基づいて型を作ることで、全ての分は 60 秒、全ての日は 24 時間となり、日付を使う計算がより自然に行えます。[return] -
訳注: 英語版の表現を修正した。英語版にある
MONTHTOVALUEABBR
,MONTHTOVALUE
という変数は現在のバージョンに存在しない。[return]