如何在 Rmarkdown 中使用数据表(DT 包)打印非 UTC 时间戳?
How can I print a non UTC timestamp using datatable (DT package) in Rmarkdown?
我有一些时间戳存储在不同的时区,我想使用 rmarkdown
文档中的 DT
包将它们包含在数据表中。
我想在存储的时区中显示时间戳,但出于某种原因 datatable
将其转换为 UTC。我使用 print
时的行为是我想要的,但格式不好。
如何使用 datatable
和 print
实现相同的行为?
这里是 rmarkdown
文件的最小工作示例:
---
title: "MinorQ"
output: html_document
---
```{r setup}
library(DT)
df=data.frame(timestamp=as.POSIXct("2017-01-01 12:34:56",tz="CET"))
df$tzone=attr(df$timestamp,"tzone")
datatable(df)
print(df)
```
如我评论中所述,您可以将 POSIXct 元素转换为字符:
input <- format(as.POSIXct("2017-01-01 12:34:56", tz = "CET"), format = '%F %T %Z')
str(input)
# chr "2017-01-01 12:34:56 CET"
这并不意味着您不能使用不同的时区。从 table 读取时,您可以使用 gsub
来获取具有正确时区的日期:
# First gsub: remove all capital letters (so only date and time remain)
# Sec. gsub: remove all characters exept capital letters (so only CET, UTC, etc. remain).
out <- as.POSIXct(gsub(input, pattern = "[A-Z]", replacement = ""),
format = '%F %T',
tz = gsub(input, pattern = "[^A-Z]", replacement = ""))
str(out)
# POSIXct[1:1], format: "2017-01-01 12:34:56"
lubridate::tz(out)
# [1] "CET"
我有一些时间戳存储在不同的时区,我想使用 rmarkdown
文档中的 DT
包将它们包含在数据表中。
我想在存储的时区中显示时间戳,但出于某种原因 datatable
将其转换为 UTC。我使用 print
时的行为是我想要的,但格式不好。
如何使用 datatable
和 print
实现相同的行为?
这里是 rmarkdown
文件的最小工作示例:
---
title: "MinorQ"
output: html_document
---
```{r setup}
library(DT)
df=data.frame(timestamp=as.POSIXct("2017-01-01 12:34:56",tz="CET"))
df$tzone=attr(df$timestamp,"tzone")
datatable(df)
print(df)
```
如我评论中所述,您可以将 POSIXct 元素转换为字符:
input <- format(as.POSIXct("2017-01-01 12:34:56", tz = "CET"), format = '%F %T %Z')
str(input)
# chr "2017-01-01 12:34:56 CET"
这并不意味着您不能使用不同的时区。从 table 读取时,您可以使用 gsub
来获取具有正确时区的日期:
# First gsub: remove all capital letters (so only date and time remain)
# Sec. gsub: remove all characters exept capital letters (so only CET, UTC, etc. remain).
out <- as.POSIXct(gsub(input, pattern = "[A-Z]", replacement = ""),
format = '%F %T',
tz = gsub(input, pattern = "[^A-Z]", replacement = ""))
str(out)
# POSIXct[1:1], format: "2017-01-01 12:34:56"
lubridate::tz(out)
# [1] "CET"