を使うのに、今一度
で使い方を整理する。
前回
注意
参照文献はかなり古い(2019年)ため、現在のバージョンでは動作しない関数などが多いとの評判がある。そこでそういった齟齬があった場合は随時コメントする。なお筆者の環境は、
アプリケーション | バージョン |
---|---|
である。
2. Juliaによるデータエンジニアリング
2.6 日付と時刻を扱う
で日付や時刻を扱うには、型や型を用いる。
型は西暦が始まってからの日数で内部表現されており、年・月・日で表現する。型はミリ秒単位で西暦からのミリ秒数で内部表現されており、年・月・日・時・分・秒・ミリ秒で表現する。
######################### ### Date型,DateTime型 ### ######################### d1 = Date("2018-08-15") dump(d1) d2 = DateTime("2018-08-15T18:22:55.123") dump(d2)
############################### ### Juliaで日付・時間を扱う ### ############################### using Dates # 現在時刻を取得 ts = Dates.now() println(ts) println("nowメソッドは",typeof(ts),"型です。") println("") # 任意の日付データを生成 date_year_month_day = Date(2018,1,12) # 年、月、日 println(date_year_month_day) println("Date関数は",typeof(date_year_month_day),"型を返します。") println("") any_date = DateTime(2018,8,15,18,22,55,123) # 年、月、日、時、分、秒、ミリ秒を指定 println(any_date) println("DateTime関数は",typeof(any_date),"型を返します。") println("") # Date, DateTime関数をStringから生成 df = DateFormat("y-m-dTH:M:S.s") dt1 = Date("2018-08-15T18:33:55.123", df) dtm1 = DateTime("2018-08-15T18:33:55.123", df) # dateformat文字列マクロ dtm2 = DateTime("2018-08-16T19:32:55.223", dateformat"y-m-dTH:M:S.s") # Cf. https://inzkyk.xyz/julia_doc/stdlib/Dates/ # 同じフォーマット文字列を使って何度もパースをするときは、 # 生のフォーマット文字列ではなく事前に作成した Dates.DateFormat を # コンストラクタに渡すことで効率が大きく向上します println(dt1) println(dtm1) println(dtm2) println("") # Date, DateTimeインスタンス間の差を日付演算を求めることが可能 delta1 = dtm2 - dtm1 delta2 = Date("2018-03-01") - Date("2018-02-01") println("dtm2とdtm1の差は$(delta1)秒です。") println("2018年2月1日から2018年3月1日までは$(delta2)あります。") println("") # 和はYear, Month, Day, Hour, Minute, Second, Millisecond型を日付演算することが可能 dtm3 = dtm1 + Year(1) + Month(4) + Day(4) + Hour(3) println(dtm3) println("") # Year, Month, Day, Hour, Minute, Second, Millisecond型には乗算、除算が定義されている # ただし結果が整数になることはプログラマが保証しなければならない println(Day(4)/2) try Day(4)/8 catch println("4日÷8はできません。") end
2.6.1 月計算の注意
型において月単位の差分を取った場合、想定外の結果が返る可能性がある点に注意すること。
######################## ### 月単位計算の注意 ### ######################## ymd1 = Date(2008,1,31) + Month(1) # 対応するのは、来月末=2/29 println(ymd1) println("") ymd2 = Date(2008,1,31) + Month(1) - Month(1) println(ymd2) println("") ymd3 = Date(2008,1,31) + (Month(1) - Month(1)) println(ymd3)