Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get the beginning of the day in POSIXct

My day starts at 2016-03-02 00:00:00. Not 2016-03-02 00:00:01.

How do I get the beginning of the day in POSIXct in local time?

My confusing probably comes from the fact that R sees this as the end-date of 2016-03-01? Given that R uses an ISO 8601?

For example if I try to find the beginning of the day using Sys.Date():

as.POSIXct(Sys.Date(), tz = "CET")
"2016-03-01 01:00:00 CET"

Which is not correct - but are there other ways?

I know I can hack my way out using a simple

as.POSIXct(paste(Sys.Date(), "00:00:00", sep = " "), tz = "CET")

But there has to be a more correct way to do this? Base R preferred.

like image 316
Thorst Avatar asked Oct 28 '25 11:10

Thorst


1 Answers

It's a single command---but you want as.POSIXlt():

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> 

It is only when converting to POSIXct happens that the timezone offset to UTC (six hours for me) enters:

R> as.POSIXct(Sys.Date())
[1] "2016-03-01 18:00:00 CST"
R> 

Needless to say by wrapping both you get the desired type and value:

R> as.POSIXct(as.POSIXlt(Sys.Date()))
[1] "2016-03-02 UTC"
R> 

Filed under once again no need for lubridate or other non-Base R packages.

like image 109
Dirk Eddelbuettel Avatar answered Oct 31 '25 02:10

Dirk Eddelbuettel



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!