9

ほとんどの場合、R を使用して数値時刻を POSIXct 形式に変換します。ただし、2 つの時点を比較する場合は、数値時刻形式を優先します。たとえば、「2001-03-13 10:31:00」のような日付形式があります。

  begin <- "2001-03-13 10:31:00"

R を使用して、これを数値 (ユリウス時間など) に変換したいと考えています。たとえば、1970 年 1 月 1 日 00:00:00 から 2001 年 3 月 13 日 10:31:00 までの経過秒数などです。

何か提案はありますか?


ユリウス暦は紀元前 45 年 (709 AUC) にユリウス・カエサルによるローマ暦の改革として始まりました。これは、アレクサンドリアの天文学者ソシゲネスとの協議の後に選ばれ、おそらく熱帯年に近似するように設計された (少なくともヒッパルコス以来知られている)。http://en.wikipedia.org/wiki/Julian_calendarを参照

4

4 に答える 4

11

文字ベクトルから「:」、「」、および「-」を削除するだけの場合は、これで十分です。

end <- gsub("[: -]", "" , begin, perl=TRUE)
#> end
#[1] "20010313103100"

キャラクタークラス?regexについての約1/4のセクションを読む必要があります。「-」は範囲演算子としてそのコンテキストで特別であるため、最初または最後に配置する必要があります。

編集後、答えは明らかに@joranが書いたものですが、最初にDateTimeクラスに変換する必要があります。

 as.numeric(as.POSIXct(begin))
#[1] 984497460

もう1つのポイントは、比較演算子DateクラスとDateTimeクラスの変数に対して機能するため、変換はまったく必要ない場合があるということです。これは、「開始」を1秒後の時間と比較し、開始がより早いことを正しく報告します。

as.POSIXct(begin) < as.POSIXct(begin) +1
 #[1] TRUE
于 2012-01-16T17:41:45.297 に答える
7

改訂された質問に基づいて、これはあなたが望むことをするはずです:

begin <- "2001-03-13 10:31:00"
as.numeric(as.POSIXct(begin))

結果は、タイムスタンプがローカル タイム ゾーンにあると仮定して、エポックからの秒数である UNIX タイムスタンプです。

于 2016-07-19T13:21:49.063 に答える