2016-09-26 7 views
2

何らかの理由で、私はas.POSIXltでタイムゾーンを調整できません。データのタイムゾーンを調整するR

time <- "Wed Jun 22 01:53:56 +0000 2016" 
t <- strptime(time, format = '%a %b %d %H:%M:%S %z %Y') 
t 
[1] "2016-06-21 21:53:56" 

as.POSIXlt(t, "EST") 
[1] "2016-06-21 21:53:56" 
as.POSIXlt(t, "Australia/Darwin") 
[1] "2016-06-21 21:53:56" 

タイムゾーンを変更することはできませんそれを解決するためにどのようにSys.time()

as.POSIXlt(Sys.time(), "EST") 
[1] "2016-09-26 01:47:22 EST" 
as.POSIXlt(Sys.time(), "Australia/Darwin") 
[1] "2016-09-26 16:19:48 ACST" 

のタイムゾーンを変更することはできますか?

+0

最初の2つのposixltコマンドを実行すると思います時間ベクトルでは、実際にはベクトルの時間帯は変更されますが、時間は変更されません。だから、今では、 't'はESTの代わりにダーウィンの時間で21:53だと思っています。 –

+1

'format(t、tz = 'Australia/Darwin'、usetz = TRUE)'を試してください。 –

答えて

0

これを試してみてください:

time <- "Wed Jun 22 01:53:56 +0000 2016" 
strptime(time, format = '%a %b %d %H:%M:%S %z %Y') 
#[1] "2016-06-22 07:23:56" 
strptime(time, format = '%a %b %d %H:%M:%S %z %Y', tz="EST") 
#[1] "2016-06-21 20:53:56" 
strptime(time, format = '%a %b %d %H:%M:%S %z %Y', tz="Australia/Darwin") 
#[1] "2016-06-22 11:23:56" 
0

strptimePOSIXltオブジェクトを返します。 tas.POSIXltを電話すると、tが返されます。 as.POSIXlt.POSIXltメソッドがないので、as.POSIXlt.defaultが送出されます。 xPOSIXltクラスを継承している場合は、最初のifの文のチェックが表示され、その場合はxが返されます。

ct <- as.POSIXct(time, tz = "Australia/Darwin", format = "%a %b %d %H:%M:%S %z %Y") 
t <- as.POSIXlt(ct) 

するか、strptimeを使用してPOSIXltに当時POSIXcttを変換すると::

str(t) 
# POSIXlt[1:1], format: "2016-06-21 20:53:56" 
print(as.POSIXlt.default) 
# function (x, tz = "", ...) 
# { 
#  if (inherits(x, "POSIXlt")) 
#   return(x) 
#  if (is.logical(x) && all(is.na(x))) 
#   return(as.POSIXlt(as.POSIXct.default(x), tz = tz)) 
#  stop(gettextf("do not know how to convert '%s' to class %s", 
#   deparse(substitute(x)), dQuote("POSIXlt")), domain = NA) 
# } 
# <bytecode: 0x2d6aa18> 
# <environment: namespace:base> 

あなたはどちらかではなくstrptimeas.POSIXctを使用して、必要なタイムゾーンを指定する必要があり、その後、POSIXltに変換

t <- strptime(time, format = "%a %b %d %H:%M:%S %z %Y") 
t <- as.POSIXlt(as.POSIXct(t, tz = "Australia/Darwin")) 
関連する問題