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