Chr*_*ook 47
更改'POSIXct'对象的tzone属性:
> pb.txt <- "2009-06-03 19:30"
> pb.date <- as.POSIXct(pb.txt, tz="Europe/London")
> attributes(pb.date)$tzone <- "America/Los_Angeles"
> pb.date
[1] "2009-06-03 11:30:00 PDT"
Run Code Online (Sandbox Code Playgroud)
请注意,这仍然是POSIXct对象,tzone已更改,并且已应用正确的偏移:
> attributes(pb.date)
$class
[1] "POSIXct" "POSIXt"
$tzone
[1] "America/Los_Angeles"
Run Code Online (Sandbox Code Playgroud)
nnn*_*nnn 36
Package lubridate包含两个转换时区的函数.根据帮助页面:
force_tz返回x与新时区具有相同时钟时间的日期时间.
force_tz(time, tzone = "America/Los_Angeles")
Run Code Online (Sandbox Code Playgroud)
with_tz更改显示瞬间的时区.为即时更改显示的时钟时间,但描述的时刻保持不变.
with_tz(time, tzone = "America/Los_Angeles")
Run Code Online (Sandbox Code Playgroud)
Dav*_*ith 16
首先,将伦敦时间转换为POSIXct对象:
pb.txt <- "2009-06-03 19:30"
pb.date <- as.POSIXct(pb.txt, tz="Europe/London")
Run Code Online (Sandbox Code Playgroud)
然后用于format在另一个时区打印日期:
> format(pb.date, tz="America/Los_Angeles",usetz=TRUE)
[1] "2009-06-03 11:30:00 PDT"
Run Code Online (Sandbox Code Playgroud)
有一些技巧可以找到合适的时区标识符来使用.这篇文章在Revolutions博客中的更多细节:转换R中的时区:提示,技巧和陷阱
如果您想在一行中执行此操作,请记住POSIXctR中的任何对象实际上只是一个数字(自纪元开始以来的 UTC 秒数),而“时区”只是一个决定如何打印该数字的属性。
因此,我们可以使用.POSIXct辅助函数如下:
x = as.POSIXct("2009-06-03 19:30", tz = "Europe/London")
.POSIXct(as.integer(x), tz = 'America/Los_Angeles')
# [1] "2009-06-03 11:30:00 PDT"
Run Code Online (Sandbox Code Playgroud)
as.integer剥离 , 的类和属性x,.POSIXct是构造 POSIXct 对象的简写;如果您的对象有毫秒并且您想跟踪它们,您可以使用as.numeric(x).