【问题标题】:How to change to 24 hour format in datatables in R Shiny如何在 R Shiny 中的数据表中更改为 24 小时格式
【发布时间】:2019-06-29 15:47:04
【问题描述】:

就像大多数人一样,时间日期格式也不是我在 R 中最喜欢的主题,并且再次给我带来了比我想象的更多的麻烦。

在这个问题的后续:SO

我用'toLocaleString' 去掉了“T”和“Z”,但现在我的datatable 显示上午和下午的时间,而我只想查看原始的 24 小时时间。

我正在谷歌浏览器中运行该应用程序,我的输出现在看起来像这样:

  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)

【问题讨论】:

    标签: r datetime datatable dt


    【解决方案1】:

    您可以尝试将DT::formatDate 中的method 参数更改为不同的日期时间格式,检查?DT::formatDateDT Helper Functions。如果这些方法都没有提供正确的输出,您可以使用format 手动格式化日期时间输出,例如

    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"
    

    如果您不想更改原始 data.frame 中的 POSIXct 值,您可以仅在渲染函数内更新日期时间格式。下面只是使用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)
    

    请注意,在您的具体示例中,如果日期不一定是 POSIXct 类,则直接将日期解析为字符串可能就足够了:

    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"
    

    【讨论】:

    • 我终于选择了你的计划 B,因为没有 formatDate 选项在应用程序中给了我“2017-03-28 22:00:02”格式
    • 我也在努力从上午/下午更改为 24 小时制。似乎唯一的方法是将日期更改为字符串格式。希望排序工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    相关资源
    最近更新 更多