2013-08-27 7 views

Antwort

22

Sie as.integer können Sekunden zu erhalten, da Epoche begann ...

x <- as.POSIXct(Sys.time()) 
#[1] "2013-08-27 12:37:17 BST" 

class(x) 
#[1] "POSIXct" "POSIXt" 

as.integer(x) 
#[1] 1377603437 

einen Vektor von Strings genannt times:

times 
#[1] "2013-08-27 12:39:32" "2013-08-27 12:39:33" "2013-08-27 12:39:34" 
#[4] "2013-08-27 12:39:35" "2013-08-27 12:39:36" "2013-08-27 12:39:37" 
#[7] "2013-08-27 12:39:38" "2013-08-27 12:39:39" "2013-08-27 12:39:40" 
#[10] "2013-08-27 12:39:41" 

as.integer(as.POSIXct(times)) 
#[1] 1377603609 1377603610 1377603611 1377603612 1377603613 1377603614 
#[7] 1377603615 1377603616 1377603617 1377603618 

Ohne die Zeitzone in den Streichern Sie wahrscheinlich haben Spezifizieren Sie das tz Argument zu as.POSIXct, z as.integer(as.POSIXct(times) , tz = "BST") für britische Sommerzeit.

+2

Wenn Sie eine Untersekundenauflösung haben, müssen Sie 'as.numeric' anstelle von' as.integer' verwenden, da Untersekunden als Dezimalstellen einer Sekunde gespeichert werden. – statquant

+0

'POSIXct' steht für die Zeit bis zur nächsten Sekunde. Das ist ein anderes Datum/Uhrzeit-Format. –

+0

Danke euch beiden, es wäre nett, wenn es mit Format wie "2013-08-27 10: 01: 22.123456" arbeiten könnte, aber ich brauche das Subsekunden Bit im Moment nicht wirklich. – swang

3

Die akzeptierte Antwort verkürzt die Zeit auf die ganze Sekunde. POSIXct bietet jedoch tatsächlich eine Auflösung von unter einer Sekunde. Wie in den Kommentaren von „statquant“ erwähnt, können Sie as.numeric verwenden, um die genaue Zeit zu erhalten:

result = as.numeric(as.POSIXct(Sys.time())) 

dass Vorsicht mit den Standardoptionen für in R-stellige Anzeige wird diese wie aussieht es keine Ziffern hinter der hat Dezimalpunkt:

> result 
[1] 1480599768 

Diese werden jedoch einfach im Display abgeschnitten. Um sie sichtbar zu machen, verwenden Sie:

> dput(result) 
1480599767.58447 

... oder setzen options('digits') auf einen höheren Wert.

Verwandte Themen