force_tz
返回与输入时间具有相同时钟时间但位于新时区的日期时间。 force_tzs
是 force_tz
的并行版本,这意味着 time
参数中的每个元素都与 tzones
参数中相应的时区匹配。
用法
force_tz(time, tzone = "", ...)
# S3 method for default
force_tz(time, tzone = "", roll_dst = c("NA", "post"), roll = NULL, ...)
force_tzs(
time,
tzones,
tzone_out = "UTC",
roll_dst = c("NA", "post"),
roll = NULL
)
参数
- time
-
POSIXct、POSIXlt、Date、chron 日期时间对象或 data.frame 对象。当 data.frame 时,data.frame 的所有 POSIXt 元素均使用
force_tz()
进行处理,并返回新的 data.frame。 - tzone
-
包含要转换到的时区的字符串。 R 必须将字符串中包含的名称识别为系统上的时区。
- ...
-
传递给其他方法的参数。
- roll_dst
-
是长度为一或二的字符串向量。当提供两个值时,它们分别指定当日期时间落入 "skipped" 和 "repeated" DST 转换时如何滚动日期时间。单个值被复制到两个值的长度。可能的值为:
* `pre` - Use the time before the transition boundary. * `boundary` - Use the time exactly at the boundary transition. * `post` - Use the time after the boundary transition. * `xfirst` - crossed-first: First time which occurred when crossing the boundary. For addition with positive units pre interval is crossed first and post interval last. With negative units post interval is crossed first, pre - last. For subtraction the logic is reversed. * `xlast` - crossed-last. * `NA` - Produce NAs when the resulting time falls inside the problematic interval.
例如,`roll_dst = c("NA", "pre") 表示对于跳过的间隔返回 NA,对于重复的时间返回较早的时间。
当提供多个单位时,"negative period" 的含义由最大单位确定。例如
time_add(t, days = -1, hours = 2, roll_dst = "xfirst")
将像负周期一样运行,从而跨越从 "post" 到 "pre" 侧和 "xfirst" 的边界,从而解析为 "post" 时间。因为这可能会导致令人困惑的行为。请参阅示例。"xfirst" 和 "xlast" 仅对加法和减法有意义。如果尝试将它们与其他函数一起使用,则会引发错误。
- roll
-
已弃用,与
roll_dst
参数相同。 - tzones
-
时区的字符向量为
time
时间戳上的 "enforced"。如果time
和tzones
长度不同,则根据通常的 R 约定回收较小的一个。 - tzone_out
-
返回的日期时间向量的时区(对于
force_tzs
)。
细节
尽管新的日期时间具有相同的时钟时间(例如,年、月、日等元素中的值相同),但它是与输入日期时间不同的时刻。
由于 R 日期时间向量无法容纳具有非统一时区的元素,因此 force_tzs
返回时区为 tzone_out
的向量,默认为 UTC。
例子
x <- ymd_hms("2009-08-07 00:00:01", tz = "America/New_York")
force_tz(x, "UTC")
#> [1] "2009-08-07 00:00:01 UTC"
force_tz(x, "Europe/Amsterdam")
#> [1] "2009-08-07 00:00:01 CEST"
## DST skip:
y <- ymd_hms("2010-03-14 02:05:05 UTC")
force_tz(y, "America/New_York", roll_dst = "NA")
#> [1] NA
force_tz(y, "America/New_York", roll_dst = "pre")
#> [1] "2010-03-14 01:05:05 EST"
force_tz(y, "America/New_York", roll_dst = "boundary")
#> [1] "2010-03-14 03:00:00 EDT"
force_tz(y, "America/New_York", roll_dst = "post")
#> [1] "2010-03-14 03:05:05 EDT"
## DST repeat
y <- ymd_hms("2014-11-02 01:35:00", tz = "UTC")
force_tz(y, "America/New_York", roll_dst = "NA")
#> [1] NA
force_tz(y, "America/New_York", roll_dst = "pre")
#> [1] "2014-11-02 01:35:00 EDT"
force_tz(y, "America/New_York", roll_dst = "boundary")
#> [1] "2014-11-02 01:00:00 EST"
force_tz(y, "America/New_York", roll_dst = "post")
#> [1] "2014-11-02 01:35:00 EST"
## DST skipped and repeated
y <- ymd_hms("2010-03-14 02:05:05 UTC", "2014-11-02 01:35:00", tz = "UTC")
force_tz(y, "America/New_York", roll_dst = c("NA", "pre"))
#> [1] NA "2014-11-02 01:35:00 EDT"
force_tz(y, "America/New_York", roll_dst = c("boundary", "post"))
#> [1] "2010-03-14 03:00:00 EDT" "2014-11-02 01:35:00 EST"
## Heterogeneous time-zones:
x <- ymd_hms(c("2009-08-07 00:00:01", "2009-08-07 01:02:03"))
force_tzs(x, tzones = c("America/New_York", "Europe/Amsterdam"))
#> [1] "2009-08-07 04:00:01 UTC" "2009-08-06 23:02:03 UTC"
force_tzs(x, tzones = c("America/New_York", "Europe/Amsterdam"), tzone_out = "America/New_York")
#> [1] "2009-08-07 00:00:01 EDT" "2009-08-06 19:02:03 EDT"
x <- ymd_hms("2009-08-07 00:00:01")
force_tzs(x, tzones = c("America/New_York", "Europe/Amsterdam"))
#> [1] "2009-08-07 04:00:01 UTC" "2009-08-06 22:00:01 UTC"
相关用法
- R lubridate format_ISO8601 采用 ISO8601 字符格式的格式
- R lubridate fit_to_timeline 将 POSIXlt 日期时间与时间线相匹配
- R lubridate DateTimeUpdate 更改日期对象的组成部分
- R lubridate stamp 基于人性化模板设置日期和时间格式
- R lubridate interval 用于创建和操作 Interval 对象的实用程序
- R lubridate is.difftime x 是 difftime 对象吗?
- R lubridate as_date 将对象转换为日期或日期时间
- R lubridate date 获取/设置日期时间的日期部分
- R lubridate round_date 日期时间对象的舍入、取整和取整方法
- R lubridate make_difftime 创建一个 difftime 对象。
- R lubridate is.timespan x 是时间长度吗?
- R lubridate with_tz 获取不同时区的日期时间
- R lubridate mplus 在日期中添加和减去月份,但不超过新月份的最后一天
- R lubridate cyclic_encoding 日期时间的循环编码
- R lubridate as.interval 将对象更改为间隔
- R lubridate second 获取/设置日期时间的秒部分
- R lubridate quarter 获取日期时间的财政季度和学期
- R lubridate posix_utils 各种 POSIX 实用程序
- R lubridate date_decimal 将小数转换为日期
- R lubridate as.duration 将对象更改为持续时间
- R lubridate hour 获取/设置日期时间的小时部分
- R lubridate minute 获取/设置日期时间的分钟部分
- R lubridate month 获取/设置日期时间的月份部分
- R lubridate duration 创建一个持续时间对象。
- R lubridate leap_year 一年是闰年吗?
注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Replace time zone to create new date-time。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。