サーチ…
前書き
Rには日付、日時、時差のクラスが付属しています。参照?Dates
、 ?DateTimeClasses
、 ?difftime
し、さらに文書化のためのそれらのドキュメントの「関連項目」セクションに従ってください。関連するドキュメント: 日付と日付 - 時刻クラス 。
備考
クラス
date-timeクラスPOSIXctは、
1970-01-01 00:00:00 UTC
年1970-01-01 00:00:00 UTC
UNIXエポック以降の時間を秒単位で格納し1970-01-01 00:00:00 UTC
。これは、Sys.Time()
現在時刻をSys.Time()
するときに返される形式です。日時クラス。日、月、年、時、分、秒などのリストを格納します。これは
strptime
によって返される形式です。Date唯一の日付クラスで、日付を浮動小数点数として格納します。
日時フォーマットの選択
UNIXのtidyverseと世界では、POSIXctが唯一の選択肢です。これは、POSIXltよりも速く、メモリを消費しません。
origin = as.POSIXct("1970-01-01 00:00:00", format ="%Y-%m-%d %H:%M:%S", tz = "UTC")
origin
## [1] "1970-01-01 UTC"
origin + 47
## [1] "1970-01-01 00:00:47 UTC"
as.numeric(origin) # At epoch
## 0
as.numeric(Sys.time()) # Right now (output as of July 21, 2016 at 11:47:37 EDT)
## 1469116057
posixlt = as.POSIXlt(Sys.time(), format ="%Y-%m-%d %H:%M:%S", tz = "America/Chicago")
# Conversion to POISXct
posixct = as.POSIXct(posixlt)
posixct
# Accessing components
posixlt$sec # Seconds 0-61
posixlt$min # Minutes 0-59
posixlt$hour # Hour 0-23
posixlt$mday # Day of the Month 1-31
posixlt$mon # Months after the first of the year 0-11
posixlt$year # Years since 1900.
ct = as.POSIXct("2015-05-25")
lt = as.POSIXlt("2015-05-25")
object.size(ct)
# 520 bytes
object.size(lt)
# 1816 bytes
専門パッケージ
- どんなときも
- data.table IDateとITime
- ファストタイム
- 潤滑油
- ナノタイム
現在の日付と時刻
Rは現在の日付、時刻、タイムゾーンにアクセスできます:
Sys.Date() # Returns date as a Date object
## [1] "2016-07-21"
Sys.time() # Returns date & time at current locale as a POSIXct object
## [1] "2016-07-21 10:04:39 CDT"
as.numeric(Sys.time()) # Seconds from UNIX Epoch (1970-01-01 00:00:00 UTC)
## [1] 1469113479
Sys.timezone() # Time zone at current location
## [1] "Australia/Melbourne"
OlsonNames()
を使用して、現在のシステム上のOlson / IANAデータベースのタイムゾーン名を表示します。
str(OlsonNames())
## chr [1:589] "Africa/Abidjan" "Africa/Accra" "Africa/Addis_Ababa" "Africa/Algiers" "Africa/Asmara" "Africa/Asmera" "Africa/Bamako" ...
今月の終わりに行く
今月の最後の日に移動したいとしましょう。この関数が役立ちます:
eom <- function(x, p=as.POSIXlt(x)) as.Date(modifyList(p, list(mon=p$mon + 1, mday=0)))
テスト:
x <- seq(as.POSIXct("2000-12-10"),as.POSIXct("2001-05-10"),by="months")
> data.frame(before=x,after=eom(x))
before after
1 2000-12-10 2000-12-31
2 2001-01-10 2001-01-31
3 2001-02-10 2001-02-28
4 2001-03-10 2001-03-31
5 2001-04-10 2001-04-30
6 2001-05-10 2001-05-31
>
日付を文字列形式で使用する:
> eom('2000-01-01')
[1] "2000-01-31"
今月の最初の日へ
ある月の最初の日に行きたいとしましょう:
date <- as.Date("2017-01-20")
> as.POSIXlt(cut(date, "month"))
[1] "2017-01-01 EST"
何ヶ月も何カ月も一貫して日付を移動する
我々は、指定した日付に移動したいとしましょうnum
ヶ月のを。 mondate
パッケージを使用する次の関数を定義できます。
moveNumOfMonths <- function(date, num) {
as.Date(mondate(date) + num)
}
日付が月の最後の日を参照する場合は、日付の月の部分を一貫して移動し、日付を調整します。
例えば:
1ヶ月前まで:
> moveNumOfMonths("2017-10-30",-1)
[1] "2017-09-30"
戻る2ヶ月:
> moveNumOfMonths("2017-10-30",-2)
[1] "2017-08-30"
2ヶ月前に転送:
> moveNumOfMonths("2017-02-28", 2)
[1] "2017-04-30"
2月の最終日から2ヶ月、つまり4月の最終日に移動します。
今月の最後の日である場合、それが後方および前方操作のためにどのように機能するかを見てみましょう:
> moveNumOfMonths("2016-11-30", 2)
[1] "2017-01-31"
> moveNumOfMonths("2017-01-31", -2)
[1] "2016-11-30"
11月は30日なので、後方操作で同じ日付が得られますが、
> moveNumOfMonths("2017-01-30", -2)
[1] "2016-11-30"
> moveNumOfMonths("2016-11-30", 2)
[1] "2017-01-31"
1月は31日なので、11月末から2ヶ月移動すると1月の最終日になります。