Изменение временной зоны в электронной таблице Google
Я знаю, что это выглядит просто.
В электронной таблице Google у меня есть столбец, в который я вводил время в один часовой пояс (GMT)
И еще один столбец должен автоматически получить время в другом часовом поясе (Тихоокеанское время)
GMT | PT
----------|------------
5:00 AM | 9:00 PM
В настоящее время я использую
=$C$3-time(8,0,0)
Проблема здесь в том, что я хочу изменить формулу времени для экономии дневного света.
Доступна ли какая-либо функция или script, которая может автоматически принимать переход на летнее время в расчет.
Ответы
Ответ 1
Короткий ответ
Встроенной функции нет, но вы можете создать пользовательскую функцию.
пример
/**
* Converts a datetime string to a datetime string in a targe timezone.
*
*@param {"October 29, 2016 1:00 PM CDT"} datetimeString Date, time and timezone.
*@param {"GMT"} timeZone Target timezone
*@param {"YYYY-MM-dd hh:mm a z"} Datetime format
*@customfunction
*/
function myFunction(datetimeString,timeZone,format) {
var moment = new Date(datetimeString);
return Utilities.formatDate(moment, timeZone, format)
}
объяснение
Для учета часовых поясов перехода на летнее время входной аргумент для преобразуемого значения должен включать дату, а не только время суток. Вы можете установить дату и часовой пояс по умолчанию для построения datetimeString, объединяя его перед вызовом формулы.
=myFunction("October 29, 2016 "&A2&" GMT","PDT","hh:mm a")
Обновить
Помимо использования трехбуквенных кодов часовых поясов, мы также можем использовать имена баз данных TZ, такие как America/Los_Angeles
, например:
=myFunction("October 29, 2016 "&A2&" GMT","America/Los_Angeles","HH:mm")
Смотрите также
Рекомендации
Ответ 2
Это также можно сделать без макросов. Достаточно просто использовать функции и манипулировать данными. Объяснить весь процесс здесь было бы немного громоздко. Просто изучите, как работают различные функции времени, и используйте свое творчество.
Подсказка: используйте =NOW()
если вы хотите текущую дату и время. На самом деле вам это понадобится, если вам нужно узнать точную разницу во времени между разными датами.
Используйте =NOW()-INT(NOW())
когда вам нужно только время (с укороченной датой, если оба раза попадают в одну и ту же дату). Затем отформатируйте соответствующую ячейку или ячейки для времени (т. 4:30 PM
), а не для даты-времени (3/25/2019 17:00:00
). Последний - это формат, который вы используете, когда хотите показать дату и время... например, когда вы используете NOW()
.
Также найдите в Интернете смещение летнего времени для различных стандартных часовых поясов (PT, MT, CT, ET, AT) по отношению к всемирному координированному времени (UTC). Например, в 2019 году смещение по тихоокеанскому времени составляет UTC-7, когда летнее время наблюдается, начиная с 10 марта в 2 часа ночи (по тихоокеанскому времени) до 3 ноября в 2 часа ночи. Это означает, что разница во времени от UTC до Тихого океана составляет 7 часов. В остальное время года 8 часов (UTC-8). Во время наблюдения летнего времени, начинающегося где-то в марте (10-го числа этого года), он переходит из PST в PDT, перемещая часы вперед на 1 час, или то, что мы знаем как UTC-7 (это летнее время). После соблюдения летнего времени он переходит от PDT к PST, снова переводя часы на 1 час назад, или что мы знаем как UTC-8 (или зимнее время). Помните, что часы сдвигаются на один час в марте, чтобы лучше использовать время. Это то, что мы называем летнее время или летнее время. Итак, после 8 марта в 2 часа ночи (в этом году в 2019 году) мы находимся в UTC-7. В ноябре мы делаем наоборот. 3 ноября в 2 часа ночи часы возвращаются на один час, когда наступает зима. В этот момент мы возвращаемся в стандартное время. Кажется немного запутанным, но на самом деле это не так.
Так, в основном, для людей в PT они идут от PST до PDT в марте и от PDT до PST в ноябре. Точно такой же процесс происходит с горным временем, центральным временем и восточным временем. Но у них есть разные смещения времени UTC. MT это либо UTC-6, либо UTC-7. CT - это или UTC-5, или UTC-6. И ET это или UTC-4 или UTC-5. Все зависит от того, находимся ли мы в летнее время, когда наблюдается переход на летнее время, чтобы лучше использовать дневное и рабочее время, или в зимнее время (AKA, Standard Time).
Внимательно изучите их и поймите, как они работают, и поиграйтесь с различными функциями времени в Excel или Google Sheets, такими как функции TIME(#,#,#)
и NOW()
и тому подобное, и, поверьте мне, скоро вы сможете делать что-то вроде профессионала с простыми функциями без использования скрипта VBA Google Apps. Вы также можете использовать функцию TEXT()
с такими трюками, как =TEXT(L4,"DDD, MMM D")&" | "&TEXT(L4,"h:mm AM/PM")
, где L4 содержит вашу дату -временная метка, для отображения времени и форматов даты. Функция VALUE()
также оказывается полезной время от времени. Вы даже можете создать цифровой таймер обратного отсчета без использования макросов. Для этого вам нужно создать циклическую ссылку и установить итерации равными 1, а время показывать каждые 1 минуту в настройках вашей электронной таблицы.
Официальный веб-сайт timeanddate dot com является хорошим источником информации для всех, кто знает о часовых поясах и о том, как обрабатывается летнее время. Там тоже есть все смещения UTC.
Ответ 3
В Google Sheets нет встроенного способа преобразования данных о часовых поясах, но, используя возможности редактора сценариев Moment.js и Googles, мы можем добавить функциональность часового пояса к любому листу.
Это файлы, которые я скопировал в свой проект сценария:
Убедитесь, что вы сначала добавили сценарий moment.js и поместили его выше сценария moment-timezone.js, так как от него зависит moment-timezone.js.
Тогда в вашем другом проекте сценария ваш файл Code.gs может выглядеть так:
var DT_FORMAT = 'YYYY-MM-DD HH:mm:ss';
/**
https://stackoverflow.com/info/34946815/timezone-conversion-in-a-google-spreadsheet/40324587
*/
function toUtc(dateTime, timeZone) {
var from = m.moment.tz(dateTime, DT_FORMAT, timeZone);//https://momentjs.com/timezone/docs/#/using-timezones/parsing-in-zone/
return from.utc().format(DT_FORMAT);
}
/**
https://stackoverflow.com/info/34946815/timezone-conversion-in-a-google-spreadsheet/40324587
*/
function fromUtc(dateTime, timeZone) {
var from = m.moment.utc(dateTime, DT_FORMAT);//https://momentjs.com/timezone/docs/#/using-timezones/parsing-in-zone/
return from.tz(timeZone).format(DT_FORMAT);
}
![enter image description here]()