R:日期格式忽略POSIXlt对象的时区

R:日期格式忽略POSIXlt对象的时区,r,timezone,posixct,posixlt,R,Timezone,Posixct,Posixlt,我无法使R在所需时区中格式化POSIXlt对象POSIXct按预期工作。这是一个错误还是我遗漏了什么 date.str = "2015-12-09 13:30" from = "Europe/London" to = "America/Los_Angeles" lt = as.POSIXlt(date.str, tz=from) format(lt, tz=to, usetz=TRUE) #[1] "2015-12-09 13:30:00 GMT" ct = as.POSIXct(date.

我无法使R在所需时区中格式化
POSIXlt
对象
POSIXct
按预期工作。这是一个错误还是我遗漏了什么

date.str = "2015-12-09 13:30"
from = "Europe/London"
to = "America/Los_Angeles"

lt = as.POSIXlt(date.str, tz=from)
format(lt, tz=to, usetz=TRUE)
#[1] "2015-12-09 13:30:00 GMT"

ct = as.POSIXct(date.str, tz=from)
format(ct, tz=to, usetz=TRUE)
#[1] "2015-12-09 05:30:00 PST"
tzone
属性相同:

attributes(ct)$tzone
#[1] "Europe/London"
attributes(lt)$tzone
#[1] "Europe/London"
解决方案

正如@nicola所指出的,
format.POSIXlt
没有
tz
参数。要在另一个时区打印
POSIXlt
日期,可以使用
lubridate
包首先将
POSIXlt
对象转换为所需的时区:

require(lubridate)
lt.changed = with_tz(lt, tz=to)
format(lt.changed, usetz=TRUE)
#[1] "2015-12-09 05:30:00 PST"

对你想要达到的目标有点困惑。在您的示例中,您的输出是正确的
13:30 GTM
05:30 PST
ct==lt
,因此
tzone
属性相同。你想做什么?参见
formalArgs(format.POSIXct)
formalArgs(format.POSIXlt)
:对于
POSIXlt
对象,
tz
参数不存在。@amwill04,我想将某个区域的时间打印为UTC时间。@nicola,很好的技巧,谢谢!这里根本不需要lubridate-只需
格式(as.POSIXct(lt),tz=to,usetz=TRUE)
就可以了。您对自己想要实现的目标有点困惑。在您的示例中,您的输出是正确的
13:30 GTM
05:30 PST
ct==lt
,因此
tzone
属性相同。你想做什么?参见
formalArgs(format.POSIXct)
formalArgs(format.POSIXlt)
:对于
POSIXlt
对象,
tz
参数不存在。@amwill04,我想将某个区域的时间打印为UTC时间。@nicola,很好的技巧,谢谢!这里根本不需要lubridate,只需
格式(as.POSIXct(lt),tz=to,usetz=TRUE)
就可以了。