[lubridate](https://lubridate.tidyverse.org/) は、[[R]] で日付・日時の作成・パース・抽出・加減算を統一した API で扱う [[tidyverse]] のコアパッケージである。`ymd()` や `ymd_hms()` のように「並び順と精度」を関数名に組み込んだパーサーが特徴。
[[Hadley Wickham]] と Garrett Grolemund が 2011 年に公開した。[[Base R]] の `as.POSIXct()` や `strptime()` ではフォーマット文字列の指定が必要だったパースを、関数名で並び順を表す形に改め、よくある日時表現を最小の構文で扱えるようにした。
## よく使う関数
### パース (文字列 → 日付・日時)
| 関数 | 説明 | 例 |
| ------------------- | ------------------------------------------- | ----------------------------------- |
| `ymd()` | 年月日順の文字列を Date 型にパース | `ymd("2026-05-14")` |
| `mdy()` | 月日年順の文字列を Date 型にパース | `mdy("05/14/2026")` |
| `dmy()` | 日月年順の文字列を Date 型にパース | `dmy("14-05-2026")` |
| `ymd_hms()` | 年月日時分秒順の文字列を POSIXct 型にパース | `ymd_hms("2026-05-14 09:00:00")` |
| `ymd_hm()` | 年月日時分順の文字列を POSIXct 型にパース | `ymd_hm("2026-05-14 09:00")` |
### 構築 (数値・現在時刻 → 日付・日時)
| 関数 | 説明 | 例 |
| ----------------- | --------------------------------------- | ------------------------------- |
| `make_date()` | 年月日の数値から Date 型を構築 | `make_date(2026, 5, 14)` |
| `make_datetime()` | 年月日時分秒の数値から POSIXct 型を構築 | `make_datetime(2026, 5, 14, 9)` |
| `today()` | 現在日付を Date 型で取得 | `today()` |
| `now()` | 現在日時を POSIXct 型で取得 | `now()` |
### 抽出 (日付・日時 → 構成要素)
| 関数 | 説明 | 例 |
| ----------- | -------------------------- | -------------------------------------- |
| `year()` | 年を整数で取得 | `year(ymd("2026-05-14"))` |
| `month()` | 月を整数または名前で取得 | `month(ymd("2026-05-14"))` |
| `day()` | 月内日を整数で取得 | `day(ymd("2026-05-14"))` |
| `wday()` | 曜日を整数または名前で取得 | `wday(ymd("2026-05-14"))` |
| `hour()` | 時を整数で取得 | `hour(ymd_hms("2026-05-14 09:00:00"))` |
| `quarter()` | 四半期を整数で取得 | `quarter(ymd("2026-05-14"))` |
### 丸め
| 関数 | 説明 | 例 |
| ---------------- | ------------------ | ---------------------------------------------------- |
| `floor_date()` | 指定単位で切り捨て | `floor_date(ymd("2026-05-14"), "month")` |
| `ceiling_date()` | 指定単位で切り上げ | `ceiling_date(ymd("2026-05-14"), "month")` |
### 算術 (期間・継続時間・区間)
| 関数 | 説明 | 例 |
| ----------------------------------- | ------------------------------------- | --------------------------------------------------------------- |
| `years()` / `months()` / `days()` | カレンダー上の期間 (Period) を構築 | `today() + months(1)` |
| `dyears()` / `ddays()` / `dhours()` | 秒数換算の継続時間 (Duration) を構築 | `today() + ddays(30)` |
| `interval()` / `%--%` | 開始 - 終了の区間 (Interval) を構築 | `ymd("2026-01-01") %--% ymd("2026-12-31")` |
| `%within%` | 日時が区間に含まれるか判定 | `ymd("2026-05-14") %within% (ymd("2026-01-01") %--% ymd("2026-12-31"))` |
### タイムゾーン
| 関数 | 説明 | 例 |
| ------------ | ----------------------------------------- | ----------------------------- |
| `with_tz()` | 表示タイムゾーンを変更 (絶対時刻は不変) | `with_tz(now(), "Asia/Tokyo")` |
| `force_tz()` | タイムゾーンを強制変更 (時刻文字列は不変) | `force_tz(now(), "Asia/Tokyo")` |
## 関連ノート
- **[深掘り]** [[lubridate と Base R では日時のデフォルトタイムゾーンが異なる]]: lubridate の日時パース関数群がデフォルトで UTC を返す挙動を、Base R との対比で詳しく扱う
- **[応用]** [[dplyr の mutate() と lubridate の make_date() で日付列を作成する]]: `make_date()` を dplyr パイプラインに組み込んで年月日列から日付列を作る使用場面
- **[応用]** [[dplyr の mutate() と lubridate の make_datetime() で日時列を作成する]]: `make_datetime()` を dplyr パイプラインに組み込んで年月日時分秒列から日時列を作る使用場面