Вот способ сделать то, что вы хотите без каких-либо пакетов.
Сначала вы берете отметку времени. Если он уже находится в формате 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"
Помните, чтобы это сработало, вам нужно знать названия часовых поясов. Для вас должно работать следующее:
- "Америка / Нью-Йорк"
- "Япония"
- "Европа / Москва"
- "Австралия / Канберра "