Изменение временной зоны в электронной таблице 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

Этот учебник был поразительно полезен: https://davidkeen.com/blog/2017/01/time-zone-conversion-in-google-sheets/

В 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