2013-08-27 14 views

Odpowiedz

22

Można użyć as.integer dostać sekund od epoki zaczęło ...

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

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

as.integer(x) 
#[1] 1377603437 

Stosując wektor ciągów nazwie 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 

Bez strefy czasowej w struny prawdopodobnie będzie musiał Podaj argument tz dla as.POSIXct, np. as.integer(as.POSIXct(times) , tz = "BST") dla British Summertime.

+2

Jeśli masz podsekundową rozdzielczość, musisz użyć 'as.numeric' zamiast' as.integer', ponieważ podsekundy są przechowywane jako dziesiętne z sekundy – statquant

+0

'POSIXct' reprezentuje czas do najbliższej sekundy. To jest inny format daty/czasu. –

+0

Dziękuję wam, byłoby miło, gdyby mógł pracować z formatem takim jak "2013-08-27 10: 01: 22.123456", ale tak naprawdę nie potrzebuję w tej chwili drugiego sekundy. – swang

3

Przyjęta odpowiedź obcina czas do całej sekundy. POSIXct w rzeczywistości zapewnia rozdzielczość pod sekundą. Jak wspomniano w komentarzach przez „statquant”, można użyć as.numeric aby uzyskać dokładną epokę:

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

Pamiętaj, że z opcjami domyślnymi cyfrowym wyświetlaczu w R będzie wyglądać to nie ma cyfr tył kropka dziesiętna:

> result 
[1] 1480599768 

Jednak są one po prostu obcięte na wyświetlaczu. Aby były widoczne, należy:

> dput(result) 
1480599767.58447 

... lub zestaw options('digits') do wyższej wartości.

Powiązane problemy