Как бы вы представили пользовательский часовой пояс? пользовательский диапазон времени на день? - PullRequest
0 голосов
/ 28 февраля 2020

Предположим, вы хотели создать соглашение о дате / времени в R, которое было с 18:00 по Нью-Йоркскому времени до 17:00 по Нью-Йоркскому времени [следующий день] (типичный торговый день в Нью-Йорке). Я полагаю, что для этого времени в 6 часов вечера по Нью-Йоркскому времени будет 00:00 в этом часовом поясе, а в 5 часов вечера по Нью-Йоркскому времени (на следующий день) - 23:00. (предположим, мы называем это пользовательским часовым поясом)

Предположим, у меня были временные метки по японскому, австралийскому и московскому времени, которые я хотел преобразовать, чтобы они приходились на день / время в этом пользовательском часовом поясе. Ищите удобный способ конвертировать каждую отметку времени в это пользовательское соглашение о дате и времени и сделать все живое в этом часовом поясе (в некотором роде). Какой самый простой способ сделать это?

ПРИМЕЧАНИЕ: предпочел бы решение base-R, но другие решения были бы интересны

1 Ответ

1 голос
/ 28 февраля 2020

Вот способ сделать то, что вы хотите без каких-либо пакетов.

Сначала вы берете отметку времени. Если он уже находится в формате POSIXct, в нем уже закодирован часовой пояс. Если он находится в символьном формате, это также будет обрабатываться путем преобразования его в объект POSIXct.

Далее вы узнаете, какова разница во времени между Нью-Йорком и местом, откуда пришла отметка времени. Вы можете сделать это путем преобразования метки времени в строку, а затем обратно в объект POSIXct с tz, установленным в «America / New_York». Вычитая из этого исходную отметку времени, вы получаете разницу во времени между Нью-Йорком и другим местом.

Теперь все, что вам нужно сделать, - это добавить это время к «фальшивому» времени Нью-Йорка и вычесть 18 часов.

Чтобы заставить вашу голову вращаться чуть меньше, мы обозначим полученное время как «UT C» для «Универсальных торговых часов»

universal_trading_clock <- function(timestamp, tz = "America/New_York")
{
  if(is.character(timestamp)) timestamp <- as.POSIXct(timestamp, tz = tz)
  NY_time       <- as.POSIXct(substr(timestamp, 1, 19), tz = "America/New_York")
  time_diff     <- NY_time - timestamp
  trading_time  <- NY_time + time_diff - 64800
  as.POSIXct(substr(trading_time, 1, 19), tz = "UTC")
}

Итак, давайте посмотрим, что в 18:05 в Нью-Йорке C сегодня согласно Универсальным торговым часам:

universal_trading_clock("2020-02-28 18:05:00")
#> [1] "2020-02-28 00:05:00 UTC"

И каково было время "UT C" для Японии в 9:00 по местному времени?

universal_trading_clock("2020-02-28 09:00:00", "Japan")
#> [1] "2020-02-27 15:00:00 UTC"

Помните, чтобы это сработало, вам нужно знать названия часовых поясов. Для вас должно работать следующее:

  • "Америка / Нью-Йорк"
  • "Япония"
  • "Европа / Москва"
  • "Австралия / Канберра "
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...