R(日付と時刻)

2025年1月16日 (木)

[R]日付のタイムゾーンを得る

lubridateパッケージのtz関数を使う。

> library(lubridate)
> da <- ymd("2012-03-04", tz = "Asia/Tokyo")
> print(da)
[1] "2012-03-04 JST"
> tz(da)
[1] "Asia/Tokyo"
> da <- ymd("2012-03-04", tz = "US/Pacific")
> print(da)
[1] "2012-03-04 PST"
> tz(da)
[1] "US/Pacific"

以下の例のとおり、Rの動作環境から得られる日付時刻はタイムゾーンの情報を持たないことに注意。持たないイコールUTCになる。

> Sys.timezone()
[1] "Asia/Tokyo"
> da <- Sys.Date()
> print(da)
[1] "2024-11-23"
> tz(da)
[1] "UTC"
> dttm <- Sys.time()
> print(dttm)
[1] "2024-11-23 23:48:33 JST"
> tz(dttm)
[1] ""

2024年12月23日 (月)

[R]日付時刻型ベクトルのタイムゾーンを変更する

force_tz関数を使う。指定のタイムゾーンに応じて時刻を変換するのではなく、ベクトルに保存されているタイムゾーンの情報だけを強制的に書き換えることに注意。

例えば、読み込むときに日付はそのままに誤ってUTCとして読み込んでしまった場合などにJSTであると強制的に書き換える場合などに使える。

> library(lubridate)
> Sys.timezone()
[1] "Asia/Tokyo"
> dttm <- ymd_hms("2001-02-03 04:05:06")
> print(dttm)
[1] "2001-02-03 04:05:06 UTC"
> dttm <- force_tz(dttm, tzone = Sys.timezone())
> print(dttm)
[1] "2001-02-03 04:05:06 JST"

タイムゾーンの情報を変えるのではなく日付時刻を指定のタイムゾーンに変換する場合は、with_tz関数を使う。

2024年12月21日 (土)

[R]日付時刻型ベクトルの日付時刻を指定のタイムゾーンの日付時刻に変更する

with_tz関数を使う。指定の日付時刻を指定のタイムゾーンに応じて時刻を変換する。

以下の例では、タイムゾーンが日本標準時(JST)の日付時刻を太平洋標準時(PST)に変換した例。JSTとPSTの時差は17時間(PST+17=JST)のため、PSTに変換した日付時刻が17時間戻っていることが分かる。

例えば、読み込むときに日付はそのままに誤ってUTCとして読み込んでしまった場合などにJSTであると強制的に書き換える場合などに使える。

> library(lubridate)
> dttm1 <- ymd_hms("2001-02-03 04:05:06", tz = "Asia/Tokyo")
> print(dttm1)
[1] "2001-02-03 04:05:06 JST"
> dttm2 <- with_tz(dttm1, tz = "America/Los_Angeles")
> print(dttm2)
[1] "2001-02-02 11:05:06 PST"

日付時刻を変換するのではなくタイムゾーンの情報を変更する場合は、force_tz関数を使う。

2024年12月18日 (水)

[R]ymd_hms関数で作成される日付時刻型ベクトルのタイムゾーンについて

実行環境如何に関わらず作成時にタイムゾーン(等時帯)を明示的に指定をしなければ、UTC(協定世界時)の日付時刻が作成されるので注意。この場合、文字列で指定した時刻がUTCに変換されるわけではなく、指定した文字列のUTCが作成されてしまう。JST(日本標準時)で作成したければ、タイムゾーンを適切に指定すること。

> Sys.timezone()
[1] "Asia/Tokyo"
> dttm <- ymd_hms(c("2001-02-03T04:05:06", "2010-11-12T13:14:15"))
> print(dttm)
[1] "2001-02-03 04:05:06 UTC" "2010-11-12 13:14:15 UTC"
> dttm <- ymd_hms("2001-02-03T04:05:06", tz = Sys.timezone())
> print(dttm)
[1] "2001-02-03 04:05:06 JST"

2024年12月 2日 (月)

[R]何か月後か調べる

seq関数とlength関数を組み合わせれば計算できる。以下の例では2024年1月16日を基準にして何か月後か調べた例。

> da <- as.Date("2024-01-16")
> length(seq(da, as.Date("2024-01-25"), by = "month")) - 1
[1] 0
> length(seq(da, as.Date("2024-02-25"), by = "month")) - 1
[1] 1
> length(seq(da, as.Date("2024-03-25"), by = "month")) - 1
[1] 2
> length(seq(da, as.Date("2025-03-25"), by = "month")) - 1
[1] 14

2024年3月21日 (木)

[R]区切り文字に.(ドット)を使った日付文字列を日付に変換する

as.Date関数もstrptime関数もデフォルトでは区切り文字に.(ドット)を使うことはできない。formatオプションに書式を指定すればよい。lubridateパッケージのymd関数はデフォルトの状態で変換することができる。

> s <- c("2001.2.3", "2012.3.4", "2123.4.5")
> as.Date(s)
charToDate(x) でエラー:
文字列は標準的な曖昧さのない書式にはなっていません
> as.Date(s, format = "%Y.%m.%d")
[1] "2001-02-03" "2012-03-04" "2123-04-05"
> strptime(s)
strptime(s) でエラー:
引数 "format" がありませんし、省略時既定値もありません
> strptime(s, format = "%Y.%m.%d")
[1] "2001-02-03 JST" "2012-03-04 JST" "2123-04-05 JST"
> lubridate::ymd(s)
[1] "2001-02-03" "2012-03-04" "2123-04-05"

2023年12月 2日 (土)

[R]日付時刻型ベクトルを作成する

readrパッケージのparse_datetime関数を使うと、文字列から簡単に日付時刻型ベクトルを作ることができる。ただし、その際はタイムゾーンを指定する必要がある。。format関数を使うと、第1引数に与えた日付時刻型ベクトルから文字列型ベクトルを作ることができる。その際の出力は、加工することができる。

> library(readr)
> parse_datetime("2001-12-23 12:34:56")
[1] "2001-12-23 12:34:56 UTC"
> Sys.timezone()
[1] "Asia/Tokyo"
> parse_datetime("2001-12-23 12:34:56", locale = locale(tz = "Asia/Tokyo"))
[1] "2001-12-23 12:34:56 JST"
> dtm <- parse_datetime("2001-12-23 12:34:56", locale = locale(tz = "Asia/Tokyo"))
> mode(dtm)
[1] "numeric"
> class(dtm)
[1] "POSIXct" "POSIXt"
> format(dtm, "%Y/%m/%d %H時%M分%S秒 %Z")
[1] "2001/12/23 12時34分56秒 JST"
> dtm <- parse_datetime(c("2001-12-23 12:34:56", "2002-02-23 23:45:12"), locale = locale(tz = "Asia/Tokyo"))
> dtm
[1] "2001-12-23 12:34:56 JST" "2002-02-23 23:45:12 JST"
> format(dtm, "%Y/%m/%d %H時%M分%S秒 %Z")
[1] "2001/12/23 12時34分56秒 JST" "2002/02/23 23時45分12秒 JST"

2023年12月 1日 (金)

[R]日付時刻型ベクトルを作成する

as.POSIXct関数を使うと、文字列から簡単に日付時刻型ベクトルを作ることができる。format関数を使うと、第1引数に与えた日付時刻型ベクトルから文字列型ベクトルを作ることができる。その際の出力は、加工することができる。

> as.POSIXct("2001-12-23 12:34:56")
[1] "2001-12-23 12:34:56 JST"
> dtm <- as.POSIXct("2001-12-23 12:34:56")
> mode(dtm)
[1] "numeric"
> class(dtm)
[1] "POSIXct" "POSIXt"
> format(dtm, "%Y/%m/%d %H時%M分%S秒 %Z")
[1] "2001/12/23 12時34分56秒 JST"
> dtm <- as.POSIXct(c("2001-12-23 12:34:56", "2002-02-23 23:45:12"))
> dtm
[1] "2001-12-23 12:34:56 JST" "2002-02-23 23:45:12 JST"
> format(dtm, "%Y/%m/%d %H時%M分%S秒")
[1] "2001/12/23 12時34分56秒" "2002/02/23 23時45分12秒"

2023年11月30日 (木)

[R]タイムゾーンIDを一覧形式で得る

その環境下に搭載されているタイムゾーンを識別するID(タイムゾーンID)を一覧形式で得るには、OlsonNames関数を使う。

> OlsonNames()
[1] "Africa/Abidjan" "Africa/Accra"
[3] "Africa/Addis_Ababa" "Africa/Algiers"
[5] "Africa/Asmara" "Africa/Asmera"
(以下、表示省略)
> grep("Tokyo", OlsonNames())
[1] 322
> grep("Tokyo", OlsonNames(), value = TRUE)
[1] "Asia/Tokyo"

2023年11月29日 (水)

[R]現在の環境のタイムゾーンを得る

Sys.timezone関数を使う。以下は、Windowsの日本語版バージョン4.3.1で実行した例。

> Sys.timezone()
[1] "Asia/Tokyo"
無料ブログはココログ

■■

■■■