當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。