web-dev-qa-db-ja.com

Googleスプレッドシートでのタイムゾーン変換

私はこれがシンプルに見えることを知っています。

Googleスプレッドシートには、あるタイムゾーン(GMT)で時間を入力する列があり、別の列は別のタイムゾーン(太平洋標準時)で自動的に時間を取得する必要があります

 GMT      | PT
----------|------------
 5:00 AM  | 9:00 PM

今の時点で私は使用しています

 =$C$3-time(8,0,0)

ここでの問題は、夏時間の時間式を変更したいことです。

夏時間を自動的に計算に使用できる関数またはスクリプトがありますか?.

21
skay

短い答え

組み込み関数はありませんが、カスタム関数を作成できます。

/**
 * 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")

更新

3文字のタイムゾーンコードを使用するほかに、 TZデータベース名 のようなAmerica/Los_Angeles、例:

=myFunction("October 29, 2016 "&A2&" GMT","America/Los_Angeles","HH:mm")

こちらもご覧ください

参照資料

13
Rubén

このチュートリアルは驚くほど役に立ちました: https://davidkeen.com/blog/2017/01/time-zone-conversion-in-google-sheets/

Googleスプレッドシートにはタイムゾーンデータを変換する方法が組み込まれていませんが、Moment.jsとGoogleのスクリプトエディターのパワーを使用して、任意のシートにタイムゾーン機能を追加できます。

これらは、スクリプトプロジェクトにコピーしたファイルです。

Moment-timezone.jsが依存するため、最初にmoment.jsスクリプトを追加し、moment-timezone.jsスクリプトの上に配置するようにしてください。

次に、otherスクリプトプロジェクトでは、Code.gsファイルは次のようになります。

var DT_FORMAT = 'YYYY-MM-DD HH:mm:ss';

/**
https://stackoverflow.com/questions/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/questions/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

2
Ryan

マクロなしでも実行できます。関数とデータ操作を使用するだけで十分です。ここでプロセス全体を説明するのは少し面倒です。さまざまな時間関数がどのように機能するかについて研究を行い、創造性を活用してください。

ヒント:現在の日付と時刻の両方が必要な場合は、=NOW()を使用します。実際には、異なる日付までの正確な時間差を調べる必要がある場合に必要になります。

時刻のみが必要な場合は、=NOW()-INT(NOW())を使用します(両方の時刻が同じ日付の場合、日付は切り捨てられます)。次に、日付(_4:30 PM_)ではなく、対応する1つ以上のセルを時間(_3/25/2019 17:00:00_)にフォーマットします。後者は、NOW()を使用するときのように、日付と時刻の両方を表示するときに使用する形式です。

また、協定世界時(UTC)に対するさまざまな標準タイムゾーン(PT、MT、CT、ET、AT)の夏時間オフセットをオンラインで検索します。たとえば、2019年3月10日午前2時(太平洋)から11月3日午前2時までDSTが観測される太平洋時間のオフセットはUTC-7です。これは、UTCから太平洋までの時間差が7時間であることを意味します。年の残りの期間は8時間(UTC-8)です。 3月のいつか(この10年)に開始するDSTの遵守中に、時計を1時間進めてPSTからPDTに移行します。 DSTの遵守後、時計を1時間戻すか、UTC-8(または冬時間)と呼ばれる時間に戻すことにより、PDTからPSTに移行します。時間をより有効に活用するために、3月に時計を1時間進めます。それがDSTまたは夏時間と呼ばれるものです。 3月8日午前2時(今年は2019年)の後、UTC-7になります。 11月には、その逆を行います。 11月3日午前2時に、冬が始まると時計が1時間戻されます。その時点で標準時間に戻ります。少し混乱しているようですが、実際はそうではありません。

したがって、基本的に、PTのユーザーは、3月にPSTからPDTに移行し、11月にPDTからPSTに移行します。まったく同じプロセスが、山岳部時間、中部時間、および東部時間でも続きます。ただし、UTC時間のオフセットは異なります。 MTはUTC-6またはUTC-7のいずれかです。CTはUTC-5またはUTC-6のいずれかです。ETはUTC-4またはUTC-5のいずれかです。夏時間は、夏時間と労働時間をより有効に利用するために夏時間を使用するか、冬時間(別名、標準時間)を使用します。

これらを徹底的に研究し、それらがどのように機能するかを理解し、TIME(#,#,#)NOW()関数などのExcelまたはGoogleスプレッドシートのさまざまな時間関数をいじってみてください。使用することなく、単純な機能を持つプロのようなことについて何でもできる VBA Google Apps Script。ただし、TEXT()関数を使用して、L4にdate-timestampが含まれる=TEXT(L4,"DDD, MMM D")&" | "&TEXT(L4,"h:mm AM/PM")などのトリックを使用して、時刻と日付の形式を表示することもできます。 VALUE()関数も時々役立ちます。マクロを使用せずに数値カウントダウンタイマーを設計することもできます。スプレッドシートの設定で、循環参照を作成し、反復を1に設定し、時間表示を1分ごとに設定する必要があります。

公式のtimeanddateドットコムのWebサイトは、タイムゾーンと夏時間の処理方法について知っているすべての人にとって良い情報源です。それらにもすべてのUTCオフセットがあります。

0
user10897742