こんにちは、etau です 🤓
前回の記事で「日付型クラス」を紹介しました。
Google Apps Script (GAS) には日付をあつかう場合に、重要な要素「タイム ゾーン」を知っておく必要があります。
タイム ゾーンは Date オブジェクトを利用する上で、軸となるものです。
この設定が想定されていたものと違う場合、コードで思ったような処理ができなくなるため注意が必要です。
GAS プロジェクトのタイム ゾーンは、初期設定が日本になっていない (2022 年 3 月 8 日現在) ため、必要に応じて設定をおこないます。
日付の操作をおこなわない場合や、日付の操作をおこなっても問題がない場合もあります
今回はこのタイム ゾーンの設定方法について説明していきます。
Date オブジェクトからタイム ゾーンを確認する
以下のコードで、実行結果を確認してみます。
function myFunction() { const date = new Date(); console.log(date); console.log(date.getFullYear()); console.log(date.getMonth()); console.log(date.getDate()); console.log(date.getHours()); console.log(date.getMinutes()); console.log(date.getSeconds()); console.log(Utilities.formatDate(date, 'JST', 'yyyy/MM/dd HH:mm:ss')); }
実行結果は、以下のとおりです。
上記のログから以下の 3 点が確認できます。
- タイム ゾーンが日本に設定されている場合 GMT+0900 (Japan Standard Time) と出力される部分が、GMT-0500 (Eastern Standard Time) となっている
- getHours メソッドで「14」時が返ってきてほしいところが「0」時 (5 + 9 時間差)となっている
- Utilities クラスの formatDate メソッドでは問題ないことが確認できる
このように、Date オブジェクトや時間 (getHours) をコード内で利用する場合に、タイム ゾーンの設定が必要になります。
つづいて appsscript.json を確認していきます。
appsscript.json とはプロジェクトに関する情報を JSON 形式で持っているファイルです
appsscript.json からタイム ゾーンを確認する
まずは、appsscript.json を以下の手順で表示させます。
appsscript.json を表示させる
[プロジェクトの設定] から『「appsscript.json」マニュフェスト ファイルをエディタで表示する』のチェック ボックスにチェックを入れます。
[ エディタ] の画面に戻ると、新しく [appsscript.json] が表示されているので、そちらをクリックします。
本プロジェクトに関する情報が表示されます。
これ以外にも、コンテナ側のマクロ機能に、関数を登録している場合や、ライブラリを利用している場合などの情報もここに表示されます
それでは、本題のタイム ゾーンを日本に変える方法です。
タイム ゾーンを日本に変更する
appsscript.json の timeZone プロパティ部分を"America/New_York"
から"Asia/Tokyo"
に書き換えます。
{ "timeZone": "Asia/Tokyo", "dependencies": { }, "exceptionLogging": "STACKDRIVER", "runtimeVersion": "V8" }
ほかの項目は、変更しないよう注意してください
さきほどのコードをあらためて実行してみると、欲しかった値が表示されています。
まとめ
今回 appsscript.json を書き換えてタイム ゾーンを日本に変更しました。
Date オブジェクトの操作に関して、おかしな結果が返ってくる場合は appsscript.json を表示させて確認するクセをつけておきましょう。
以前は、このような設定をおこなう必要はなかったので、将来的にはタイム ゾーンの初期設定が"Asia/Tokyo"
に戻る可能性も十分考えられますが、日本以外のタイム ゾーン利用することも可能ですので、覚えておいて損はない方法です。
2022/04/27 追記
[プロジェクトの設定] から [タイムゾーン] の指定ができるようになりました!