R中很多包(readr、lubridate、readxl、writexl以及base包等)都有处理时间日期数据的方法,但是每个包默认的时区不一样。我在中国大陆只用北京时间作为时区(在R中对应Asia/Shanghai),但每次读取时间日期数据或者定义时间日期数据时都要指定时区,特别麻烦,在使用过程中也经常出现困扰,比如经常会出现时区和预期不一致的情况(见下面的例子),有没有办法把各个包的默认时区设置成统一。
# 定义一个时间日期型7数据,时区指定为北京时间
x <- lubridate::ymd_hm("2024-08-09 19:00", tz = "Asia/Shanghai")
date_demo <- data.frame(x = x)
# 将数据写入excel文件中
writexl::write_xlsx(date_demo, "date_demo.xlsx")
但发现导入的excel文件x的值显示的是“2024-08-09 11:00:00 UTC",不是期待的北京时间2024-8-9 19:00:00 。
我的运行环境为:
> sessionInfo()
R version 4.4.1 (2024-06-14 ucrt)
Platform: x86_64-w64-mingw32/x64
Running under: Windows 10 x64 (build 19045)
Matrix products: default
locale:
[1] LC_COLLATE=Chinese (Simplified)_China.utf8
[2] LC_CTYPE=Chinese (Simplified)_China.utf8
[3] LC_MONETARY=Chinese (Simplified)_China.utf8
[4] LC_NUMERIC=C
[5] LC_TIME=Chinese (Simplified)_China.utf8
time zone: Asia/Shanghai
tzcode source: internal
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] compiler_4.4.1 generics_0.1.3 tools_4.4.1 rstudioapi_0.16.0
[5] lubridate_1.9.3 writexl_1.5.0 timechange_0.3.0