首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在POSIXct中开始新的一天

如何在POSIXct中开始新的一天
EN

Stack Overflow用户
提问于 2016-03-01 10:15:33
回答 3查看 1.8K关注 0票数 4

我的一天从2016-03-02 00:00:00开始。不是2016-03-02 00:00:01

如何在当地时间在POSIXct中获得一天的开始?

我的困惑可能是因为R认为这是2016-03-01的终结日期?考虑到R使用ISO 8601?

例如,如果我试图使用Sys.Date()找到一天的开始:

代码语言:javascript
代码运行次数:0
运行
复制
as.POSIXct(Sys.Date(), tz = "CET")
"2016-03-01 01:00:00 CET"

这是不正确的--但还有其他方法吗?

我知道我可以用一个简单的

代码语言:javascript
代码运行次数:0
运行
复制
as.POSIXct(paste(Sys.Date(), "00:00:00", sep = " "), tz = "CET")

但必须有更正确的方法来做到这一点吗?R基优先。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-02 12:56:55

这是一个命令--但是你想要as.POSIXlt()

代码语言:javascript
代码运行次数:0
运行
复制
R> as.POSIXlt(Sys.Date())
[1] "2016-03-02 UTC"
R> format(as.POSIXlt(Sys.Date()), "%Y-%m-%d %H:%M:%S")
[1] "2016-03-02 00:00:00"
R> 

只有当转换为POSIXct时,偏移到UTC的时区(对我来说是6小时)才进入:

代码语言:javascript
代码运行次数:0
运行
复制
R> as.POSIXct(Sys.Date())
[1] "2016-03-01 18:00:00 CST"
R> 

不用说,通过对两者进行包装,您将得到所需的类型和值。

代码语言:javascript
代码运行次数:0
运行
复制
R> as.POSIXct(as.POSIXlt(Sys.Date()))
[1] "2016-03-02 UTC"
R> 

再次申请在不需要润滑油或其他非基础R包。

票数 8
EN

Stack Overflow用户

发布于 2016-03-02 08:40:42

尽管你喜欢R基,但对于"smart“的某些含义来说,"smart”的意思是“智能方式”,这是可以理解的:

代码语言:javascript
代码运行次数:0
运行
复制
library(lubridate)
x <- floor_date(Sys.Date(),"day")

> format(x,"%Y-%m-%d-%H-%M-%S")
[1] "2016-03-02-00-00-00"

来自?floor_date

floor_date接受日期-时间对象,并将其舍入到指定时间单位的最接近的整数值。

挺方便的。

票数 2
EN

Stack Overflow用户

发布于 2016-03-01 10:28:04

你的例子有点不清楚。

您正在讨论的是一天开始的1分钟的差异,但是您的示例显示了由于时区造成的1小时的差异。

你可以试试

代码语言:javascript
代码运行次数:0
运行
复制
?POSIXct  

才能解释其功能。

使用Sys.Date()和POSIXct以某种方式覆盖您的时区设置。

代码语言:javascript
代码运行次数:0
运行
复制
as.POSIXct(Sys.Date(), tz="EET")  
 "2016-03-01 01:00:00 CET"  

当输入字符串时

代码语言:javascript
代码运行次数:0
运行
复制
as.POSIXct("2016-03-01 00:00:00", tz="EET")  
 "2016-03-01 EET"

看来00:00实际上是一天的开始。您可以根据以下两个不等式的结果得出这个结论

代码语言:javascript
代码运行次数:0
运行
复制
as.POSIXct("2016-03-02 00:00:02 CET")>as.POSIXct("2016-03-02 00:00:01 CET")

真的

代码语言:javascript
代码运行次数:0
运行
复制
as.POSIXct("2016-03-02 00:00:01 CET")>as.POSIXct("2016-03-02 00:00:00 CET")

真的

所以这是一个时区问题。注意,00:00:00将自动从as.POSIXct结果中删除。

代码语言:javascript
代码运行次数:0
运行
复制
as.POSIXct("2016-03-02 00:00:00 CET")

"2016-03-02 CET“

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35720154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档