6

I am trying to remove the seconds from a column of hours in POSIXct format:

#"2016-04-02 10:33:45 COT" "2016-04-02 22:19:24 COT"
#"2016-04-09 17:47:13 COT" "2016-04-13 16:56:23 COT"

x <- structure(c(1459589625, 1459631964, 1460220433, 1460562983),
     class = c("POSIXct", "POSIXt"), tzone = "")

I am trying this but I am not seeing results:

y <- as.POSIXct(x, format = "%d/%m/%Y %H:%M")
Zheyuan Li
  • 71,365
  • 17
  • 180
  • 248
anitasp
  • 577
  • 4
  • 13
  • 35

5 Answers5

9

No you are giving as.POSIXct a wrong format...

What about using format

datetimes = as.POSIXct(c("2016-04-02 10:33:45 COT", "2016-04-02 22:19:24 COT" ,"2016-04-09 17:47:13 COT", "2016-04-13 16:56:23 COT")    
format(datetimes,format='%Y%m%d %H:%M')

[1] "20160402 10:33" "20160402 22:19" "20160409 17:47" "20160413 16:56"
Wistar
  • 3,770
  • 4
  • 45
  • 70
statquant
  • 13,672
  • 21
  • 91
  • 162
7

you can use round.POSIXt:

round(Sys.time(), units = "mins")
#"2017-01-30 11:20:00 CET"
fc9.30
  • 2,293
  • 20
  • 19
  • If you use this function to manipulate a data.frame you need an extra as.POSIXct to remove the list structure – fc9.30 Jan 30 '17 at 10:31
1

This is what you have:

x <- structure(c(1459589625, 1459631964, 1460220433, 1460562983),
     class = c("POSIXct", "POSIXt"), tzone = "")

This is what you want:

x <- format(as.POSIXct(x), "%d-%m-%Y %H:%M")
x

[1] "02-04-2016 15:03" "03-04-2016 02:49" "09-04-2016 22:17" "13-04-2016 21:26"
Manoj Kumar
  • 5,273
  • 1
  • 26
  • 33
0

If you want to round date to minutes you can do this:

   x <- as.POSIXlt(c("2016-04-02 10:33:45 COT"))
   res <-as.POSIXlt(floor(as.double(x) / 60) * 60, origin = '1970-01-01')
   res
   #  "2016-04-02 10:33:00 BST"
Bulat
  • 6,869
  • 1
  • 29
  • 52
0

Just use substring:

datetimes <- c("2016-04-02 10:33:45 COT", "2016-04-02 22:19:24 COT" ,
               "2016-04-09 17:47:13 COT", "2016-04-13 16:56:23 COT")

as.POSIXct(substring(datetimes, 1, nchar(datetimes[1])-7))   

#[1] "2016-04-02 10:33:00 IST" "2016-04-02 22:19:00 IST" 
#    "2016-04-09 17:47:00 IST" "2016-04-13 16:56:00 IST"

# without timezone
format(substring(datetimes, 1, nchar(datetimes[1])-7), 
                 format='%Y-%m-%d %H:%M:%S', usetz = FALSE)
#[1] "2016-04-02 10:33" "2016-04-02 22:19" "2016-04-09 17:47" "2016-04-13 16:56"
Sandipan Dey
  • 21,482
  • 2
  • 51
  • 63