Преобразование unixtime в дату и время, которое хранит миллисекунды

Я работаю с некоторыми временными метками:

pageviews$timestamp %>% head()
[1] "1605859226452" "1605859226461" "1605859248803" "1605859261112" "1605859283839" "1605859471370"

Мне нужно преобразовать их в дату и время и сохранить на максимально возможном уровне детализации, я думаю, миллисекунды.

Ранее пробовал использовать as.POSIXct:

strtime_to_dt <- function(x) {
  as.POSIXct(as.numeric(x) / 1000, origin = "1960-01-01", formats = "%Y-%m-%d %H:%M:%OS")
}

x <- pageviews$timestamp %>% head() # same data as above
> strtime_to_dt(x)
[1] "2010-11-20 08:00:26 UTC" "2010-11-20 08:00:26 UTC" "2010-11-20 08:00:48 UTC" "2010-11-20 08:01:01 UTC" "2010-11-20 08:01:23 UTC"
[6] "2010-11-20 08:04:31 UTC"

Это возвращает дату и время на втором уровне. Как я могу получить его на миллисекундном уровне?

(Было бы здорово, если бы это можно было сделать в tidyverse или lubridate, но я возьму что угодно)

РЕДАКТИРОВАТЬ на основе комментариев некоторые временные метки:

 x
      timestamp
1 1605859226452
2 1605859226461
3 1605859248803
4 1605859261112
5 1605859283839
6 1605859471370

Обновленная функция:

strtime_to_dt <- function(x) {format(strtime_to_dt(x), "%F %H:%M:%OS3")}

strtime_to_dt(x)
Error: C stack usage  7969908 is too close to the limit

Добавление информации о сеансе()

sessionInfo()
R version 4.0.3 (2020-10-10)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 20.04 LTS

Matrix products: default
BLAS/LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.8.so

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=C              LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C             LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] DBI_1.1.0              jsonlite_1.7.1         googleAnalyticsR_0.8.0 lubridate_1.7.9        forcats_0.5.0         
 [6] stringr_1.4.0          dplyr_1.0.2            purrr_0.3.4            readr_1.4.0            tidyr_1.1.2           
[11] tibble_3.0.4           ggplot2_3.3.2          tidyverse_1.3.0       

loaded via a namespace (and not attached):
 [1] tinytex_0.27      tidyselect_1.1.0  xfun_0.19         haven_2.3.1       gargle_0.5.0      colorspace_1.4-1  vctrs_0.3.4      
 [8] generics_0.1.0    utf8_1.1.4        blob_1.2.1        rlang_0.4.8       pillar_1.4.6      withr_2.3.0       glue_1.4.2       
[15] bit64_4.0.5       dbplyr_2.0.0      modelr_0.1.8      readxl_1.3.1      lifecycle_0.2.0   munsell_0.5.0     gtable_0.3.0     
[22] cellranger_1.1.0  rvest_0.3.6       memoise_1.1.0     curl_4.3          fansi_0.4.1       broom_0.7.2       Rcpp_1.0.5       
[29] openssl_1.4.3     backports_1.2.0   scales_1.1.1      fs_1.5.0          bit_4.0.4         googleAuthR_1.3.1 askpass_1.1      
[36] hms_0.5.3         digest_0.6.27     stringi_1.5.3     grid_4.0.3        odbc_1.3.0        cli_2.1.0         tools_4.0.3      
[43] magrittr_1.5      pacman_0.5.1      crayon_1.3.4      pkgconfig_2.0.3   ellipsis_0.3.1    xml2_1.3.2        reprex_0.3.0     
[50] assertthat_0.2.1  httr_1.4.2        rstudioapi_0.11   R6_2.5.0          compiler_4.0.3  

Вы можете указать OS3

akrun 10.12.2020 00:03

Привет @akrun, хорошо... где? Как?!

Doug Fir 10.12.2020 00:06

Пробовал менять "%Y-%m-%d %H:%M:%OS" на "%Y-%m-%d %H:%M:%OS3" и "%Y-%m-%d %H:%M:OS" ни один из них не помог

Doug Fir 10.12.2020 00:12

Если вам нужно показать вывод в виде символа, вы можете использовать strftime или format, и он покажет миллисекунды

akrun 10.12.2020 00:13

Вы можете проверить str1 <- "1605859226452"; format(strtime_to_dt(str1), "%F %H:%M:%OS3") [1] "2010-11-20 02:00:26.451"

akrun 10.12.2020 00:16

Это дает Error: unexpected string constant in " format(strtime_to_dt(str1), "%F %H:%M:%OS3") "2010-11-20 02:00:26.451""

Doug Fir 10.12.2020 00:18

Код format(strtime_to_dt(str1), "%F %H:%M:%OS3")

akrun 10.12.2020 00:19

@akrun Я попробовал вашу функцию, но, пожалуйста, посмотрите мои правки. Получение «Ошибка: использование стека C 7969908 слишком близко к пределу»

Doug Fir 10.12.2020 00:26

У вас есть строка символов, как показано в первой строке

akrun 10.12.2020 00:27

Я попытался преобразовать в символ: x <- as.character(x) > x [1] "c(\"1605859226452\", \"1605859226461\", \"1605859248803\", \"1605859261112\", \"1605859283839\", \"1605859471370\")" > strtime_to_dt(1605859226452) Error: C stack usage 7969908 is too close to the limit > strtime_to_dt('1605859226452') Error: C stack usage 7969908 is too close to the limit

Doug Fir 10.12.2020 00:31

Вам может понадобиться as.character(x$timestamp)

akrun 10.12.2020 00:32

Вы должны иметь возможность использовать strtime_to_dt <- function(x) format(as.POSIXct(x / 1000, origin = "1960-01-01"), format = "%F %H:%M:%OS3") (хотя это, конечно, возвращает строку символов даты, а не фактический объект даты).

Ritchie Sacramento 10.12.2020 00:37

@DougFir Можете ли вы проверить решение, которое я опубликовал. Меня устраивает

akrun 10.12.2020 00:46
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
13
146
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мы можем

format(strtime_to_dt(as.character(x$timestamp)), "%F %H:%M:%OS3") 
#[1] "2010-11-20 02:00:26.451" "2010-11-20 02:00:26.460" "2010-11-20 02:00:48.802" "2010-11-20 02:01:01.111" "2010-11-20 02:01:23.838"
#[6] "2010-11-20 02:04:31.369"    

данные

x <- structure(list(timestamp = c(1605859226452, 1605859226461, 1605859248803, 
1605859261112, 1605859283839, 1605859471370)), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6"))

Привет, попробовал: x <- pageviews$timestamp %>% head > x [1] "1605859226452" "1605859226461" "1605859248803" "1605859261112" "1605859283839" "1605859471370" > format(strtime_to_dt(as.character(x)), "%F %H:%M:%OS3") Error: C stack usage 7972244 is too close to the limit

Doug Fir 10.12.2020 00:56

@DougFir неважно, у меня он работает правильно.

akrun 10.12.2020 00:57

:( Я тоже пытался использовать структуру (список...) и получил ту же ошибку. Думаю, это уникально для моей настройки

Doug Fir 10.12.2020 00:59

@DougFir, вы можете попробовать новый сеанс R. Я использую R 4.0.3 на Mac

akrun 10.12.2020 01:00

Да попробую новую сессию сейчас. Я тоже опубликовал sessionInfo()

Doug Fir 10.12.2020 01:00

@DougFir Вы получаете ту же ошибку с strtime_to_dt(as.character(x$timestamp))

akrun 10.12.2020 01:01

Да, та же ошибка с strtime_to_dt(as.character(x$timestamp))

Doug Fir 10.12.2020 01:04

Свежая сессия: 1) pageviews %>% head() %>% pull(timestamp) %>% dput c("1605859226452", "1605859226461", "1605859248803", "1605859261112", "1605859283839", "1605859471370")

Doug Fir 10.12.2020 01:05

2) функция: strtime_to_dt <- function(x) {format(strtime_to_dt(x), "%F %H:%M:%OS3")} (кажется, это уже chr, поэтому удалено как.char, но пробовал этот вариант

Doug Fir 10.12.2020 01:05

@DougFir Я понимаю v1 <- c("1605859226452", "1605859226461", "1605859248803", "1605859261112", "1605859283839", "1605859471370"); format(strtime_to_dt(v1), "%F %H:%M:%OS3") [1] "2010-11-20 02:00:26.451" "2010-11-20 02:00:26.460" "2010-11-20 02:00:48.802" "2010-11-20 02:01:01.111" "2010-11-20 02:01:23.838" [6] "2010-11-20 02:04:31.369"

akrun 10.12.2020 01:06

3) y <- pageviews %>% head() %>% pull(timestamp) > y [1] "1605859226452" "1605859226461" "1605859248803" "1605859261112" "1605859283839" "1605859471370" Тогда strtime_to_dt(y) Error: C stack usage 7972356 is too close to the limit

Doug Fir 10.12.2020 01:06
v1 <- c("1605859226452", "1605859226461", "1605859248803", "1605859261112", "1605859283839", "1605859471370") > format(strtime_to_dt(v1), "%F %H:%M:%OS3") Error: C stack usage 7974692 is too close to the limit
Doug Fir 10.12.2020 01:07

Это может быть что-то связанное с вашей ОС, так как я не могу это воспроизвести.

akrun 10.12.2020 01:08

Спасибо за попытку все равно. Принимаю, так как ваш ответ явно работает, но не в моей ОС

Doug Fir 10.12.2020 01:08

Другие вопросы по теме