Al igual que la mayoría de las personas, el formato de fecha de tiempo tampoco es mi tema favorito en R, y una vez más me da más problemas de lo que esperaba.

En seguimiento de esta pregunta: por lo

Me deshizo de la 't' y 'z' con 'toLocaleString', pero ahora mi datatable muestra los tiempos en AM y PM, mientras que solo quiero ver el original las 24 horas.

Estoy ejecutando la aplicación en Google Chrome, y mi salida se ve así en este momento:

enter image description here

  library(shiny)
  library(DT)

  data <- structure(list(DATUM = structure(c(1490738402, 1490738436, 1490738440, 
                                             1490738444, 1490738447, 1490738451, 1490738455, 1490738459, 1490738463, 
                                             1490738467), class = c("POSIXct", "POSIXt"), tzone = "CEST"), NUMMER = c(19, 
                                                                                                                      20, 21, 22, 23, 24, 25, 26, 27, 28)), .Names = c("DATUM", "NUMMER"), row.names = c(NA, 10L), class = "data.frame")

  tz <- Sys.timezone()                                                                                                    
  data$DATUM <- as.POSIXct(as.character(data$DATUM), tz=tz)

  ui=fluidPage(

    dataTableOutput("tab")
  )

  server= function(input, output,session) {

    output$tab <- DT::renderDataTable({
      datatable(data,rownames=TRUE, filter="top", class = 'cell-border stripe') %>%
        formatDate(1, method = 'toLocaleString')})


  }

  shinyApp(ui, server)
1
Mark 29 jun. 2019 a las 18:47

1 respuesta

La mejor respuesta

Podría intentar cambiar el argumento method en DT::formatDate a un formato de fecha diferente, marque ?DT::formatDate o DT Helper Functions. Si ninguno de estos métodos le da la salida correcta, puede formatear manualmente la salida de fecha de fecha con format, por ejemplo.

data$DATUM <- format(data$DATUM, "%d/%m/%Y, %H:%M:%S")
#>  [1] "28/03/2017, 22:00:02" "28/03/2017, 22:00:36" "28/03/2017, 22:00:40"
#>  [4] "28/03/2017, 22:00:44" "28/03/2017, 22:00:47" "28/03/2017, 22:00:51"
#>  [7] "28/03/2017, 22:00:55" "28/03/2017, 22:00:59" "28/03/2017, 22:01:03"
#> [10] "28/03/2017, 22:01:07"

Si no desea cambiar los valores POSIXCT en los datos originales. Frame, puede actualizar el formato de fecha de fecha solo dentro de la función de renderización. Por debajo de una forma de hacerlo con dplyr:

library(shiny)
library(DT)
library(dplyr)

data <- structure(list(DATUM = structure(c(1490738402, 1490738436, 1490738440, 
                                           1490738444, 1490738447, 1490738451, 1490738455, 1490738459, 1490738463, 
                                           1490738467), class = c("POSIXct", "POSIXt"), tzone = "CEST"), NUMMER = c(19, 
                                                                                                                    20, 21, 22, 23, 24, 25, 26, 27, 28)), .Names = c("DATUM", "NUMMER"), row.names = c(NA, 10L), class = "data.frame")

tz <- Sys.timezone()                                                                                                    
data$DATUM <- as.POSIXct(as.character(data$DATUM), tz=tz)

ui=fluidPage(

  dataTableOutput("tab")
)

server= function(input, output,session) {

  output$tab <- DT::renderDataTable({

    mutate(data, DATUM = format(DATUM, "%d/%m/%Y, %H:%M:%S")) %>%
    datatable(rownames=TRUE, filter="top", class = 'cell-border stripe')

    })


}

shinyApp(ui, server)

Tenga en cuenta que en su ejemplo específico, si las fechas no están necesariamente necesariamente necesarias para ser clase POSIXCT, podría ser suficiente para analizar las fechas como cadenas directamente:

data <- structure(list(DATUM = structure(c(1490738402, 1490738436, 1490738440, 
                                           1490738444, 1490738447, 1490738451, 1490738455, 1490738459, 1490738463, 
                                           1490738467), class = c("POSIXct", "POSIXt"), tzone = "CEST"), NUMMER = c(19, 
                                                                                                                    20, 21, 22, 23, 24, 25, 26, 27, 28)), .Names = c("DATUM", "NUMMER"), row.names = c(NA, 10L), class = "data.frame")

(data$DATUM <- as.character(data$DATUM))
#>  [1] "2017-03-28 22:00:02" "2017-03-28 22:00:36" "2017-03-28 22:00:40"
#>  [4] "2017-03-28 22:00:44" "2017-03-28 22:00:47" "2017-03-28 22:00:51"
#>  [7] "2017-03-28 22:00:55" "2017-03-28 22:00:59" "2017-03-28 22:01:03"
#> [10] "2017-03-28 22:01:07"
1
Joris C. 29 jun. 2019 a las 19:25