Hello there,
This is an old issue, but surprisingly the last version of lubridate does not seem to handle this very well.
Consider this simple example
dataframe <- tibble(gmt_time = c('2016-07-08 04:30:10.690'), value = c(1))
library(hms)
library(lubridate)
dataframe %>%
mutate(gmt_time = ymd_hms(gmt_time),
est_time = with_tz(gmt_time, 'America/New_York'),
myhour1 = as.hms(est_time),
myhour2 = as.hms(gmt_time))
# A tibble: 1 x 5
gmt_time value est_time myhour1 myhour2
<dttm> <dbl> <dttm> <time> <time>
1 2016-07-08 04:30:10.690 1 2016-07-08 00:30:10.690 30'10.690000" 30'10.690000"
What is going on here? I would like to extract the time component of the timestamp, so that I can run filters like time > 04:30:00
Thanks!
as.hms()
is not a lubridate
function but a hms
function, when you use as.hms()
this way, you have to specify the time zone, like this.
library(dplyr)
library(hms)
library(lubridate)
dataframe <- tibble(gmt_time = c('2016-07-08 04:30:10.690'), value = c(1))
dataframe %>%
mutate(gmt_time = ymd_hms(gmt_time),
est_time = with_tz(gmt_time, 'America/New_York'),
myhour1 = as.hms(est_time, tz = 'UTC'),
myhour2 = as.hms(gmt_time, tz = 'America/New_York'))
#> # A tibble: 1 x 5
#> gmt_time value est_time myhour1 myhour2
#> <dttm> <dbl> <dttm> <time> <time>
#> 1 2016-07-08 04:30:10 1 2016-07-08 00:30:10 04:30.690000 30'10.690000"
Created on 2019-01-18 by the reprex package (v0.2.1)
1 Like
Thanks! that is very nice. Its a lot of tz
repetition but that seems to be working correctly
time_str = c('2013-01-03 21:59:21.549', '2013-01-04 22:00:21.549', '2013-01-05 22:01:21.222', '2013-01-06 22:06:23.559' )
value = c(1,2,3,4)
data <- tibble(time_str, value)
data %>% mutate(timestamp_utc = ymd_hms(time_str, tz = 'UTC'),
timestamp_est = with_tz(timestamp_utc, 'America/New_York'),
time_est = as.hms(timestamp_est, tz = 'America/New_York')) %>%
filter(time_est >= hms::as.hms('16:59:00', tz = 'America/New_York'),
time_est <= hms::as.hms('17:01:00', tz = 'America/New_York'))
gives
# A tibble: 2 x 5
time_str value timestamp_utc timestamp_est time_est
<chr> <dbl> <dttm> <dttm> <time>
1 2013-01-03 21:59:21.549 1 2013-01-03 21:59:21.549 2013-01-03 16:59:21.549 16:59.549
2 2013-01-04 22:00:21.549 2 2013-01-04 22:00:21.549 2013-01-04 17:00:21.549 17:00.549
You can set the defaul time zone with this pkgconfig::set_config("hms::default_tz", "UTC")
2 Likes
system
Closed
5
This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.