尝试转换字符格式的日期
Trying to convert the date which is in character format
我的数据集有 90,000 条奇数记录。日期格式如下:
timestamp
2018-01-27T09:01:49Z
2018-01-27T00:04:08Z
2018-01-27T09:04:22Z
2018-01-27T09:04:28Z
2018-01-27T00:07:38Z
我试过了
as.Date(recfive$timestamp, "%Y/%m/%d %H:%M:%S")
我得到了所有 NA
[1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
字符串中的日期分隔符是“-”而不是“/”
尝试as.Date(recfive$timestamp, "%Y-%m-%d")
或as.POSIXct(recfive$timestamp, format = "%Y-%m-%dT%H:%M:%SZ")
如果你想要一个日期时间对象
将 ISO 8601 标准时间戳强制转换为 class 日期
时间戳已经在 ISO 8601 standard format 中,这是明确的。因此,将转换为class时需要无格式规范 Date:
as.Date(recfive$timestamp)
#> [1] "2018-01-27" "2018-01-27" "2018-01-27" "2018-01-27" "2018-01-27"
将 ISO 8601 标准时间戳强制转换为 class POSIXct(日期时间)
强制转换为日期时间对象 (class POSIXct
) 时,必须指定时区。虽然,时区已经在输入数据中由尾随字母 Z
指示(如 Zulu = UTC),但在输入,不幸的是。
在我当前的语言环境中,使用本地时区创建一个 POSIXct 对象,其中时间戳表示与指定时间不同的实例(在冬季,CET 比 UTC 提前一小时)。
as.POSIXct(recfive$timestamp)
#> [1] "2018-01-27 CET" "2018-01-27 CET" "2018-01-27 CET" "2018-01-27 CET" "2018-01-27 CET"
因此,必须明确指定时区:
as.POSIXct(recfive$timestamp, tz = "UTC")
#> [1] "2018-01-27 UTC" "2018-01-27 UTC" "2018-01-27 UTC" "2018-01-27 UTC" "2018-01-27 UTC"
请注意,as.POSIXct()
return 编辑了一个表示一天开始的截断日期时间。
要获取指定的完整日期时间,可以使用格式规范调用 as.POSIXct()
:
as.POSIXct(recfive$timestamp, format = "%FT%TZ", tz = "UTC")
#> [1] "2018-01-27 09:01:49 UTC" "2018-01-27 00:04:08 UTC" "2018-01-27 09:04:22 UTC"
#> [4] "2018-01-27 09:04:28 UTC" "2018-01-27 00:07:38 UTC"
或者,有许多专门用于将日期时间字符串简化或快速强制转换为 class POSIXct 的软件包,所有 return 结果相同:
lubridate::ymd_hms(recfive$timestamp)
anytime::anytime(recfive$timestamp, asUTC = TRUE)
anytime::utctime(recfive$timestamp, tz = "UTC")
fasttime::fastPOSIXct(recfive$timestamp, tz = "UTC")
数据
recfive <- data.table::fread(
"timestamp
2018-01-27T09:01:49Z
2018-01-27T00:04:08Z
2018-01-27T09:04:22Z
2018-01-27T09:04:28Z
2018-01-27T00:07:38Z")
我的数据集有 90,000 条奇数记录。日期格式如下:
timestamp
2018-01-27T09:01:49Z
2018-01-27T00:04:08Z
2018-01-27T09:04:22Z
2018-01-27T09:04:28Z
2018-01-27T00:07:38Z
我试过了
as.Date(recfive$timestamp, "%Y/%m/%d %H:%M:%S")
我得到了所有 NA
[1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
字符串中的日期分隔符是“-”而不是“/”
尝试as.Date(recfive$timestamp, "%Y-%m-%d")
或as.POSIXct(recfive$timestamp, format = "%Y-%m-%dT%H:%M:%SZ")
如果你想要一个日期时间对象
将 ISO 8601 标准时间戳强制转换为 class 日期
时间戳已经在 ISO 8601 standard format 中,这是明确的。因此,将转换为class时需要无格式规范 Date:
as.Date(recfive$timestamp)
#> [1] "2018-01-27" "2018-01-27" "2018-01-27" "2018-01-27" "2018-01-27"
将 ISO 8601 标准时间戳强制转换为 class POSIXct(日期时间)
强制转换为日期时间对象 (class POSIXct
) 时,必须指定时区。虽然,时区已经在输入数据中由尾随字母 Z
指示(如 Zulu = UTC),但在输入,不幸的是。
在我当前的语言环境中,使用本地时区创建一个 POSIXct 对象,其中时间戳表示与指定时间不同的实例(在冬季,CET 比 UTC 提前一小时)。
as.POSIXct(recfive$timestamp)
#> [1] "2018-01-27 CET" "2018-01-27 CET" "2018-01-27 CET" "2018-01-27 CET" "2018-01-27 CET"
因此,必须明确指定时区:
as.POSIXct(recfive$timestamp, tz = "UTC")
#> [1] "2018-01-27 UTC" "2018-01-27 UTC" "2018-01-27 UTC" "2018-01-27 UTC" "2018-01-27 UTC"
请注意,as.POSIXct()
return 编辑了一个表示一天开始的截断日期时间。
要获取指定的完整日期时间,可以使用格式规范调用 as.POSIXct()
:
as.POSIXct(recfive$timestamp, format = "%FT%TZ", tz = "UTC")
#> [1] "2018-01-27 09:01:49 UTC" "2018-01-27 00:04:08 UTC" "2018-01-27 09:04:22 UTC"
#> [4] "2018-01-27 09:04:28 UTC" "2018-01-27 00:07:38 UTC"
或者,有许多专门用于将日期时间字符串简化或快速强制转换为 class POSIXct 的软件包,所有 return 结果相同:
lubridate::ymd_hms(recfive$timestamp)
anytime::anytime(recfive$timestamp, asUTC = TRUE)
anytime::utctime(recfive$timestamp, tz = "UTC")
fasttime::fastPOSIXct(recfive$timestamp, tz = "UTC")
数据
recfive <- data.table::fread(
"timestamp
2018-01-27T09:01:49Z
2018-01-27T00:04:08Z
2018-01-27T09:04:22Z
2018-01-27T09:04:28Z
2018-01-27T00:07:38Z")