当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R lubridate force_tz 替换时区以创建新的日期时间


force_tz 返回与输入时间具有相同时钟时间但位于新时区的日期时间。 force_tzsforce_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"。如果 timetzones 长度不同,则根据通常的 R 约定回收较小的一个。

tzone_out

返回的日期时间向量的时区(对于 force_tzs )。

更新时区中的 POSIXct 对象

细节

尽管新的日期时间具有相同的时钟时间(例如,年、月、日等元素中的值相同),但它是与输入日期时间不同的时刻。

由于 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/time-zones.r

相关用法


注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Replace time zone to create new date-time。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。