これは単純に見えますね。
Googleスプレッドシートには、1つのタイムゾーン(GMT)で時間を入力する列があります。
そして別の列は自動的に別のタイムゾーン(太平洋標準時)の時刻を取得します。
GMT | PT |
---|---|
午前5時 | 午後9時 |
現時点では、以下を使用しています:
=$C$3-time(8,0,0)
ここでの問題は、夏時間に合わせて時間計算式を変更したいということです。
夏時間を自動的に計算に取り入れることができる関数またはスクリプトはありますか。
ベストアンサー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 {"Timezone"} timeZone Target timezone
*@param {"YYYY-MM-dd hh:mm a z"} Datetime format
*@customfunction
*/
function formatDate(datetimeString,timeZone,format) {
var moment = new Date(datetimeString);
if(moment instanceof Date && !isNaN(moment)){
return Utilities.formatDate(moment, timeZone, format)
} else {
throw 'datetimeString can not be parsed as a JavaScript Date object'
}
}
注記:
new Date(string)
/ Date.parse(string)
Google Apps Script の実装では、一部のタイムゾーンの省略形がサポートされていません。
からhttps://tc39.es/ecma262/#sec-date-time-string-format
CET、EST などの民間タイムゾーンの略語を指定する国際標準は存在せず、まったく異なる 2 つのタイムゾーンに同じ略語が使用されることもあります。
関連している
説明
夏時間ゾーンを考慮するには、変換する値の入力引数に時刻だけでなく日付も含める必要があります。数式を呼び出す前に、デフォルトの日付とタイムゾーンを設定して連結し、datetimeString を構築することができます。
=formatDate("October 29, 2016 "&A2&" GMT","PDT","hh:mm a")
ターゲットタイムゾーンには3文字の略語のほかに、TZ データベース名例えばAmerica/Los_Angeles
:
=formatDate("October 29, 2016 "&A2&" GMT","America/Los_Angeles","HH:mm")
datetimeString でタイムゾーンの省略形と TZ 名が使用できない場合は、時間オフセット (つまり UTC-4) を使用します。