2016-12-19 15 views
1

01:00と定義されているこの時間オブジェクトから1時間(3600秒)を減算しようとしています。私がそうすると、時間構成要素は消え、私は日付だけが残されます。私は時間の構成要素を保存する必要があります - どうすればいいですか?これは、減算の結果が00-00の場合にのみ発生します。POSIXltオブジェクトから減算するときの時間を減らします。

test <- strptime("2016-09-02_01-00", format = "%Y-%m-%d_%H-%M", tz = "UTC") 
test 
[1] "2016-09-02 01:00:00 UTC" 
test-3600 
[1] "2016-09-02 UTC" 
+2

時間コンポーネントがまだそこにあります、それはちょうど真夜中のベクトルを持つすべての日付で印刷されません。表示する書式を強制する場合は、 'strftime()'や 'format()'などを使用します。 – MrFlick

+1

これは '?strptime'でも書かれています。*いずれかの要素に午前0時でない時間要素がある場合は、形式メソッドの既定値は"%Y-%m-%d%H:%M:%S " %Y-%m-%d "以外の場合*" –

答えて

3

これは内容と表現の違いです。 3600 を引く

fmt <- "%Y-%m-%d_%H-%M" 
test <- strptime("2016-09-02_01-00", 
    format = fmt, tz = "UTC") 
str(test) 
## POSIXlt[1:1], format: "2016-09-02 01:00:00" 

変化(POSIXltからPOSIXctに)構造...

str(test-3600) 
## POSIXct[1:1], format: "2016-09-02" 

を行います...しかし、フォーマットの変更は、Rが参考にして、印刷になろうとしてちょうどによるものであり利用可能な最も単純な表現。時間情報は実際には消えていない。 ?strptimeから(おかげ@DavidArenburg):

フォーマット方法のデフォルトは "%Y-%M-%D%H:%のM:%S" である任意の要素が深夜ない時間成分を有する場合、および "%Y-%M-%D" そう

@MrFlickはコメントで述べているように、あなたはフォーマット文字列を指定することでこれをオーバーライドすることができます...

fmt2 <- "%Y-%m-%d %H:%M:%S" 
format(test-3600,fmt2) 
## [1] "2016-09-02 00:00:00" 
+0

優れています。ご清聴ありがとうございます。それはそれに答える。 – SilvanD

関連する問題