2016-04-07 10 views
2

私はタイムゾーンで日付を定義しましたが、scalesパッケージdate_formatを使用してプリントすると、自分の時間がUTCで表示されます。date_format timezone strangeness

> library(scales) 
> st <- as.POSIXct("2015-10-31 00:00:00",tz="US/Pacific") 
> st 
[1] "2015-10-31 PDT" 
> fmt <- date_format("%Y-%m-%d %R %Z") 
> fmt(st) 
[1] "2015-10-31 07:00 UTC" 

興味深いことに、この作品(そうPOSIXctは、タイムゾーンを理解しているようです) - しかし、私のフォーマットを超える十分な制御を与えるものではありません:

> format(st,usetz=T) 
[1] "2015-10-31 PDT" 

この信頼性の欠如は、?date_formatのヘルプでを示唆されています

割り当て時間が ゾーンのオブジェクトを使用して%zまたは%Zを出力に使用すると、そのタイムゾーンの値を使用しようとしています - bそれは が成功するとは限りません。

だから私の質問は、どのように私はそれが成功するを作るんですか?

回避策を提案するとうまくいきますが、アップホーツに参加する可能性がありますが、この問題のポイントは、date_formatで起こっていることについての洞察を得たいということです。

+0

3文字のタイムゾーン頭字語は*標準化されていないので避けてください。 PDTは、異なるロケールとは異なることを意味する場合があります。 * strange *は '' 00:00:00 + 07:00Z'の代わりに '' PDT''を返すというものです。 Rのローカリゼーションはそれほど一貫性がありません。この場合、 'st'はカスタムフォーマットを使用しました。 *特定の*形式で日付を表示する場合は、書式文字列で明示的に定義します。この場合、返信したい形式は何ですか? –

+0

3文字のタイムゾーンは避けてください。私はそれらを使用せず、 'date_format'と' format'が行いました。例が示すように。 –

+0

返される形式は何ですか? –

答えて

3

date_formatの定義は非常に短いです:

function (format = "%Y-%m-%d", tz = "UTC") 
{ 
    function(x) format(x, format, tz = tz) 
} 

デフォルトを変更しない場合はタイムゾーンが変更された理由は明らかです。

+0

これは自分で見つかったはずです。まだ混乱している。 –

+0

スケールには、主にプロット用の便利な機能が含まれています(特にggplot2で使用される)。 – Roland

+0

'date_format'がタイムゾーンをオーバーライドする理由がわかりません。その後、その利便性の一部を否定するようです。 –