如何在Rmarkdown中使用datatable(DT包)打印非UTC时间戳?

4
我有一些存储在不同时区的时间戳,我想在rmarkdown文档中使用DT包将其包含在数据表中。我想在存储的时区中显示时间戳,但由于某种原因datatable将其转换为UTC。当我使用print时,行为是我想要的,但格��不好看。 如何在datatableprint中实现相同的行为呢? 这里是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)
```

2
这是由于从R到JS的类型转换引起的。您可以只存储字符串:timestamp = format(as.POSIXct("2017-01-01 12:34:56", tz = "CET"), format = '%F %T %Z') - Martin Schmelzer
是的,我相信我也可以使用as.character。当我提出问题时,我考虑到数据中有几个时区的更复杂情况。然而,我不认为会出现这种情况,所以我会采用你的解决方案。 - Jon Nagra
1个回答

4

如我在评论中提到的那样,您可以将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"

这并不意味着您不能使用不同的时区。在从表中读取数据时,您可以使用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"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接