2017-07-26 14 views
1

私はR.使用してRでのタイムゾーンとSys.time()の出力のフォーマットformat.Posix *

例えば

Sys.time()の出力をフォーマットする方法を把握しようとしています:

t <- Sys.time() 
print(t) 
# [1] "2017-07-26 09:41:29 CEST" 

は正しいです。

tの日付、時および分とタイムゾーンからなる文字列を作成したいとします。 私は使用できます

format(t, format = "%F %R %Z") 
# [1] "2017-07-26 09:41 CEST" 

これは私が期待しているものです。

ただし、タイムゾーンを明示的に設定すると出力がわかりにくいです。たとえば:

format(t, format = "%F %R %Z", tz = "Europe/Stockholm") 
# [1] "2017-07-26 09:41 CEST" 

は、私が何を期待生成するが、私は間違っていると思う

format(t, format = "%F %R %Z", tz = "CEST") 
# [1] "2017-07-26 07:41 CEST" 

は、私は、出力も"2017-07-26 09:41 CEST"または"2017-07-26 09:41 Europe/Stockholm"

format(t, format = "%F %R %Z", tz = "UTC+02:00") 
# [1] "2017-07-26 05:41 UTC" 
ことが期待しているだろう

私はさらに奇妙なものを見つけました。私の例では、彼らが与える出力を与える理由

  • :私は二つのことを知りたいのですが答えでは"2017-07-26 10:41 UTC+02:00"

    こと?

  • タイムゾーンを常に"2017-07-26 10:41 UTC+02:00"または"2017-07-26 10:41 Europe/Stockholm"のように記述する方法はありますか?
+0

を試してみてください。できません。 「名前付き」タイムゾーン(「ヨーロッパ/ストックホルム」など)に固執する。未確認/未知の引数は、(サイレント)UTC設定につながります。 –

+0

しかし、なぜ 'format(Sys.time()、format ="%F%R%Z "、tz ="私は手がかりがありません ")' '' '2017-07-26 15:50" "2017-07-26 15:50 CEST"? – Florian

+1

ありがとうございますが、出力にタイムゾーンを含めたり、時にはそれを放置するという矛盾した動作によって、私は少し混乱しています。たとえば、 'format(Sys.time()、format ="%F%R%Z "、tz =" aaaaaa b ")'は '2017-07-26 15:55 aaaaaa"を返します。私は手がかりがありません。私はタイムゾーンをつぶすことを計画しているわけではありません。 – Florian

答えて

0

Rは(%Zである)"CEST"としてコンソールのタイムゾーンを表示するにもかかわらず、その名前の有効なタイムゾーンが存在しません。有効なタイムゾーン名は、OlsonNames()で確認できます。例については

any(grepl("CEST", OlsonNames())) 
#[1] FALSE 

タイムゾーンがCESTとして表示されている場合、それはまだ内部"Europe/Stockholm"として格納されています。私たちは、%Zは出力のみのためであり、入力のために信頼性がないことをdput

as.POSIXct("2017-07-26 10:46:12", tz = "Europe/Stockholm") 
#[1] "2017-07-26 10:46:12 CEST" 

dput(as.POSIXct("2017-07-26 10:46:12", tz = "Europe/Stockholm")) 
#structure(1501058772, class = c("POSIXct", "POSIXt"), tzone = "Europe/Stockholm") 

注意を使用して確認することができます。 tzの有効な値ではありません。tzに無効な値を使用すると、通常はUTCとして扱われます(?format.POSIXctまたは?strptimeで詳細を読む)。そのため、予期しない出力が得られるのはformat(t, format = "%F %R %Z", tz = "CEST")

"Europe/Stockholm"を明示的に使用してください。特定の形式で時間をフォーマットするためとして

any(grepl("Europe/Stockholm", OlsonNames())) 
#[1] TRUE 

、あなたはタイムゾーンの引数に「ランダム」の入力を使用することができると仮定し

format(as.POSIXct("2017-07-26 10:46:12", tz = "UTC"), "%F %R UTC%z") 
#[1] "2017-07-26 10:46 UTC+0000" 
+0

答えに感謝します。私はいくつかの疑問を持っています:明示的に "UTC + 02:00"を使用すると、なぜそれはOlsonNames()にないので、UTCにデフォルト設定しますが、実際には2時間を削除しますか?また、他の "OlsonNames"有効な形式でタイムゾーンをフォーマットする方法はありますか? – lucacerone

+0

私が持っているもう1つの使用例は、タイムスタンプ(UTCで1970-01-01からの秒数として)と "GMT + 01:00"のような形式でタイムゾーンを与えられることが多いということです。場合によっては、「GMT + 08:30」のようなタイムゾーンもあります。現地時間を取得するには、このようなケースを処理する必要があります。どのようにRで行うことができますか – lucacerone

関連する問題