在Rmarkdown文档头部显示日期与时区(省略时间)的实现问题
解决R Markdown头部显示日期+时区(无具体时间)的问题
我来给你几个简单靠谱的方案搞定这个需求~
首先得搞清楚为什么之前的方法有局限:Sys.Date()返回的是**Date类型**,它只记录年月日,本身就不带时区信息,所以肯定没法展示时区;而Sys.time()是**POSIXct类型**,包含完整的时间戳和时区,我们可以直接对它做格式化,不用绕弯子拆分字符串。
最推荐的方案:直接格式化Sys.time()
用format()函数指定输出格式,同时包含你要的日期样式和时区缩写,代码非常简洁:
在R里测试的话:
format(Sys.time(), '%d %B, %Y %Z') # 输出示例:"19 March, 2018 EDT"
把这段代码放到R Markdown的YAML头部即可:
--- title: "你的文档标题" author: "你的名字" date: "`r format(Sys.time(), '%d %B, %Y %Z')`" output: html_document ---
这里的%Z会输出时区的缩写(比如EDT、UTC),如果想要时区的偏移量(比如-0400),可以把%Z换成%z。
备选方案:拆分字符串(不推荐,但满足你的尝试思路)
如果你一定要用拆分Sys.time()的方式,要注意as.character(Sys.time())的输出结构——通常是"YYYY-MM-DD HH:MM:SS TZ",所以拆分后第三部分就是时区。我们可以提取日期和时区,再把日期转成你想要的格式:
# 拆分时间字符串 time_components <- strsplit(as.character(Sys.time()), " ")[[1]] # 把日期转成目标格式,再和时区拼接 date_with_tz <- paste(format(as.Date(time_components[1]), '%d %B, %Y'), time_components[3]) date_with_tz # 同样得到:"19 March, 2018 EDT"
不过这个方法不如直接格式化可靠,因为不同系统的时间字符串格式可能有细微差异,容易出问题,所以还是优先用第一种方案~
内容的提问来源于stack exchange,提问作者iskandarblue
相关产品推荐
相关产品推荐

