2

RODBCを使用して、Sql Server 2008からRにデータをインポートしようとしています:

db <- odbcDriverConnect(connection = "Driver={SQL Server Native Client 10.0};Server=server; Database=db;Trusted_Connection=yes;")
results <- sqlQuery(db, "select timestamp from table where some-restriction")

データは「datetime」型の列に格納されます。すべてのタイムスタンプは UTC ですが、システムのタイムゾーンは CET です。R はすべてのタイムスタンプを "POSIXct" "POSIXt" 型の値に変換します。例:

"2011-01-01 07:24:12 CET"

"2011-01-01 08:35:10 CET"

"2011-01-01 09:02:50 CET"

タイムスタンプは正しく、タイムゾーンは間違っています。タイムゾーンが明示的に指定されていないため、R はすべてのタイムスタンプにローカル タイムゾーンを割り当てているようです。

データのタイムゾーンを指定できる方法はありますか?タイムゾーン情報は正しいでしょうか?

4

2 に答える 2

6

後でタイムゾーンを変更するのがおそらく最も簡単です。

library(lubridate)
tz(results) <- "UTC"
于 2011-09-20T12:21:56.580 に答える
4

R 3.1.0より前、およびこの回答が最初に書かれたとき:

クラス のオブジェクトの場合、データをインポートした直後に変数POSIXltの属性を変更できます。tzone

attr(results$timestamp,"tzone") <- "UTC"

データがクラスの場合POSIXct、タイムゾーン オフセットによってデータが変更されるため、次のようPOSIXltにラップして最初に変換しas.POSIXlt()ます。

results$timestamp <- as.POSIXlt(results$timestamp)

例えば:

tm <- as.POSIXlt(Sys.time())
tm
[1] "2011-09-20 13:45:01 BST"
attr(tm,"tzone") <- "UTC"
tm
[1] "2011-09-20 13:45:01 UTC"

R 3.1.0 以降、この動作は属性ではなく POSIXlt オブジェクトのコンポーネントを使用するように変更され、次のようにニュースで斜めに参照されています。

日付時刻の印刷では、既知の場合、その時点で使用されているタイムゾーンの省略形が使用されます。たとえば、1940 年より前のパリの場合、これは LMT、PMT、WET、または WEST になります。これを可能にするために、「POSIXlt」クラスには、各要素の略語を記録するオプションのコンポーネント「ゾーン」があります。

だから今、あなたはただ使うでしょうtm$zone <- "UTC"

于 2011-09-20T12:32:08.607 に答える