「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。データ分析・語学に力点を置いています。 →現在、コンサルタントの雛になるべく、少しずつ勉強中です(※2024年1月21日改訂)。

MENU

Juliaを使うときのTipsをまとめる(その08/X)

 \mathrm{Julia}を使うのに、今一度

で使い方を整理する。

前回

power-of-awareness.com

注意

 参照文献はかなり古い(2019年)ため、現在のバージョンでは動作しない関数などが多いとの評判がある。そこでそういった齟齬があった場合は随時コメントする。なお筆者の環境は、

アプリケーション バージョン
\mathrm{Julia} 1.8.0
\mathrm{Jupyter} \mathrm{Notebook} 6.5.2

である。

2. Juliaによるデータエンジニアリング

2.6 日付と時刻を扱う

 \mathrm{Julia}で日付や時刻を扱うには、\mathrm{Date}型や\mathrm{DateTime}型を用いる。
 \mathrm{Date}型は西暦が始まってからの日数で内部表現されており、年・月・日で表現する。\mathrm{DateTime}型はミリ秒単位で西暦からのミリ秒数で内部表現されており、年・月・日・時・分・秒・ミリ秒で表現する。

#########################
### 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 月計算の注意

 \mathrm{Date}型において月単位の差分を取った場合、想定外の結果が返る可能性がある点に注意すること。

########################
### 月単位計算の注意 ###
########################

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)

2.6.2 タイムゾーンの扱い

 \mathrm{Dates}パッケージはタイムゾーンを扱っておらず、代わりに\mathrm{TimeZones}パッケージを用いること。

import TimeZones

dtz = parse(ZonedDateTime, "2017-11-14 11:03:53 +0100",
            dateformat"yyyy-mm-dd HH:MM:SS zzzzz")
dtz
プライバシーポリシー お問い合わせ