日時の形式
日時関連のアクションでは、さまざまな日時の表記を使用することができます。
この章では、日時の表記形式について説明します。
日時
詳細は後述しますが、たとえば出力では以下のような表記が使用できます。
- 2020-04-01T20:07:42+0900
- Wed, 01 Apr 2020 20:07:42 +0900
- 2020年4月1日 20:07
- 明日
- 1時間前
また、入力では前述の形式に加え、以下のような幅広い表記が使用できます。
ただし後述のように、バグの元にもなるため注意が必要です。
- 2020/4/1
- 20/04/01
- 20-04-01
- 20200401
- 今年4月1日
- 令和2年4月1日
- R2.4.1
- ヒジュラ歴1442年4月1日
- 4/1
- Apr 1, 2020
- 1st April 2020
- 20:07:42
- 8:07 PM
- PM 8:07
- 8.07 PM
- 午後8時半
- 20時7分42.180秒
- 120分後
出力形式
日付型変数・間隔型変数の値を出力する際には、指定した出力形式にすることができます。
アクションに入力したマジック変数(日付型変数・間隔型変数)をタップすると、画面下部にピッカーが現れるので、そこで表示形式を指定します。
なお「時間フォーマット」のみを「カスタムフォーマット」にすることはできないため、「日付フォーマット」の項で「カスタムフォーマット」を指定し、「文字列をフォーマット」の項で日付と時刻をまとめて指定してください。
出力形式は、次の通りです。
日付フォーマット
-
- なし
- 日付を表示しません。
-
- 短
- 「中」と同じです。
※ 日本語環境では、「中」との違いはありません。
-
- 中
- 2020/04/01(デバイスの暦法が「西暦(グレゴリオ暦)」の場合)
R2/04/01(デバイスの暦法が「和暦」の場合)
-
- 長
- 2020年4月1日(デバイスの暦法が「西暦(グレゴリオ暦)」の場合)
令和2年4月1日(デバイスの暦法が「和暦」の場合)
-
- RFC 2820
- Wed, 01 Apr 2020 20:07:42 +0900のように表示されます。
時刻も一緒に表示されます。
-
- ISO 8601
- 2020-04-01のように表示されます。
-
- 相対
- 日・週・月・年単位で、相対表記で表示します。
相対表記については、後の節を参照してください。
-
- 経過時間/終了までの時間
- 秒・分・時間・日・週・月・年単位で、相対表記で表示します。
相対表記については、後の節を参照してください。
-
- カスタム
- 任意の形式で日時を表示します。
形式は「文字列をフォーマット」の項で指定します。
カスタムフォーマットの書式については、次の節を参照してください。
時間フォーマット
「日付フォーマット」が「RFC 2820」のときは、指定できません。
-
- なし
- 時刻を表示しません。
-
- 短
- 8:07のように表示されます。
プロパティ「日付フォーマット」が、「短」・「中」・「長」・「相対」のときに選択できます。
-
- 中
- 8:07:42のように表示されます。
プロパティ「日付フォーマット」が、「短」・「中」・「長」・「相対」のときに選択できます。
-
- 長
- 8:07:42 JSTのように表示されます。
プロパティ「日付フォーマット」が、「短」・「中」・「長」・「相対」のときに選択できます。
-
- ISO 8601時刻を含める
- T20:07:42+0900のように表示されます。
プロパティ「日付フォーマット」が、「ISO 8601」のときにスイッチとして表示されます。
カスタム
カスタムフォーマットで書式指定子を使うと、出力形式を任意のものに設定することができます。
ショートカットApp内のアクションの説明では、「Unicode Technical Standard #35 “Unicode Locale Data Markup Language (LDML)”」の“Part 4: Dates”のFormat Patterns(リンク先は英語)に従っていると書かれていますが、その書式指定子のすべてに対応しているわけではありません。
ここでは主なものを紹介します。
なお出力は西暦のみで、和暦などを出力することはできません。
またカスタムフォーマットの中で書式指定子と同じ文字を使用する場合は、シングルクォート(')で囲むとエスケープすることができます。
※日付型変数はショートカットApp内部ではNSDateクラスとして扱われているため、カスタムフォーマットの書式はNSDateFormatterクラスと同じ書式です。
ただし和暦には対応していないなどの違いがあり、完全に同一ではないようです。
書式指定子 | 出力例 | 説明 | |
---|---|---|---|
暦 | G | 西暦 | 暦の種類西暦を出力します。 |
GG | |||
GGGGG | AD | 暦の種類を英語の略記で、AD(紀元)、もしくはBC(紀元前)で出力します。 | |
年 | y | 2020 | 4桁表記で、西暦年を出力します。 |
Y | 2020 |
4桁表記で、西暦年を出力します。 指定された日が属する週が年をまたぐときには、前年として扱います。 |
|
u | 2020 |
西暦年を出力します。 紀元前はマイナス値になります。 |
|
yy | 20 | 2桁表記で、西暦年を出力します。 | |
YY | 20 |
2桁表記で、西暦年を出力します。 指定された日が属する週が年をまたぐときには、前年として扱います。 これはwやwwと一緒に使うときに使います。 |
|
四半期 | Q | 2 | 四半期単位の数字を出力します。 |
02 | 2桁表記で、四半期単位の数字を出力します。 | ||
QQQ | Q2 | 四半期単位を英語の略記で出力します。 | |
QQQQ | 第2四半期 | 四半期単位を日本語で出力します。 | |
月 | M | 4 | 月を出力します。 |
MM | 04 | 2桁表記で、月を出力します。 | |
MMMM | 4月 | 日本語表記で、月を出力します。 | |
週 | w | 14 |
その年の第何週目かを出力します。 指定された日が属する週が月をまたぐときは、前月の最終週として扱います。 |
ww | 14 |
2桁表記で、その年の第何週目かを出力します。 指定された日が属する週が月をまたぐときは、前月の最終週として扱います。 |
|
W | 1 |
その月の第何週目かを出力します。 指定された日が属する週が月をまたぐときは、前月の最終週として扱います。 |
|
F | 1 |
「第〇□曜日」の数字の部分を出力します。 出力例の場合、2020年4月1日は4月の「第1水曜日」なので、1になります。 |
|
日 | d | 1 | 日を出力します。 |
dd | 01 | 2桁表記で、日を出力します。 | |
D | 92 | その年の1月1日からの日数を出力します。 | |
DD | 92 |
2桁表記で、その年の1月1日からの日数を出力します。 3桁になる場合は、3桁で出力します。 |
|
DDD | 092 | 3桁表記で、その年の1月1日からの日数を出力します。 | |
g | 2458941 |
ユリウス日(紀元前4713年1月1日12:00からの日数)を出力します。 |
|
gg | 2458941 |
ユリウス日を、桁数をgの数で指定して出力します。 値の桁が指定よりも少ないときは、頭に0をつけます。 多いときは指定を無視して出力します。 |
|
曜日 | e | 4 |
曜日を数で出力します。 日曜日は1、土曜日は7です。 |
E | 水 | 1文字表記で、日本語の曜日を出力します。 | |
EEEE | 水曜日 | 3文字表記で、日本語の曜日を出力します。 | |
時間帯 | a | 午後 |
日本語で、時間帯を出力します。 値は午前・午後です。 |
b | 午後 |
日本語で、時間帯を出力します。 0:00~11:59は午前、12:00~12:59は正午、13:00~23:59は午後です。 |
|
B | 夜 |
日本語で、詳細な時間帯を出力します。 4:00~11:59は朝、12:00~12:59は正午、13:00~15:59は昼、16:00~18:59は夕方、18:00~20:59は夜、23:00~3:59は夜中です。 なお0:00~0:59は真夜中ではなく、夜中になります。 |
|
時 | K | 8 |
12時間制の時を出力します。 |
KK | 08 |
2桁表記で、12時間制の時を出力します。 |
|
h | 8 |
12時間制の時を出力します。 ただし0時台は、12になります。 |
|
hh | 08 |
2桁表記で、12時間制の時を出力します。 ただし0時台は、12になります。 |
|
H | 20 | 24時間制の時を出力します。 | |
HH | 20 | 2桁表記で、24時間制の時を出力します。 | |
k | 20 |
24時間制の時を出力します。 ただし0時台は、24になります。 |
|
kk | 20 |
2桁表記で、24時間制の時を出力します。 ただし0時台は、24になります。 |
|
分 | m | 7 | 分を出力します。 |
mm | 07 | 2桁表記で、分を出力します。 | |
秒 | s | 42 | 秒を出力します。 |
ss | 42 | 2桁表記で、秒を出力します。 | |
ミリ秒 | S | 180 |
ミリ秒を出力します。 ミリ秒が記録されていない場合は、0を出力します。 |
SS | 180 |
2桁表記で、ミリ秒を出力します。 ミリ秒が記録されていない場合は、00を出力します。 |
|
SSS | 180 |
3桁表記で、ミリ秒を出力します。 ミリ秒が記録されていない場合は、000を出力します。 |
|
A | 72462180 |
その日の0:00:00.000からの経過ミリ秒を出力します。 |
|
タイムゾーン | z | JST | 英語の略記で、タイムゾーンを出力します。 |
zzzz | 日本標準時 | 日本語表記で、タイムゾーンを出力します。 | |
x | +09 | ISO 8601の基本形式の略記で、グリニッジ標準時との時差を出力します。 | |
Z | +0900 | ISO 8601の基本形式で、グリニッジ標準時との時差を出力します。 | |
xx | |||
ZZZZZ | +09:00 |
ISO 8601の拡張形式で、グリニッジ標準時との時差を出力します。 |
|
xxx | |||
O | GMT+9 | ISO 8601の基本形式の略記で、グリニッジ標準時との時差を出力します。 | |
ZZZZ | GMT+09:00 | グリニッジ標準時との時差を出力します。 | |
OOOO | |||
V | jptyo |
タイムゾーンをUN/LOCODE形式で出力します。 |
|
VV | Asia/Tokyo |
Time Zone DatabaseのタイムゾーンIDを出力します。 |
|
VVV | 東京 |
日本語表記で、タイムゾーンの地域名を出力します。 |
|
VVVV | 日本時間 |
日本語表記で、タイムゾーンを出力します。 |
日時表記の注意点
入力形式については、前述のように自由度が非常に高くなっています。
それがゆえに、きちんと仕様を理解していないと、これがバグの原因になることがあります。
以下のような不具合を予防するため、RFC 2820, ISO 8601形式などのような規格で定められた日時表記の使用を、おすすめします。
特に注意が必要なものとしては、以下があります。
-
日付を省略したり、日付の指定方法に誤りがある場合は、エラーにならずに今日の日付が設定されます。
-
日付で年を省略した場合は、今年になります。
-
時刻を省略したり、時刻の表記に誤りがある場合は、エラーにならずに午前12:00に設定されます。
-
入力する時刻が1~11時台だった場合、12時間制で指定したものだと認識されてしまうことがあります。
なお指定した時刻が現在時刻よりも前の場合は、現在よりも後の時刻だと判断します。
(※午前7:00に6:00と指定した場合、午前7:00の次にくる6:00、つまり午後6:00だと判断します。)
そのため「午前」・「AM」・「朝」などを付加して誤認識を避けることをおすすめします。
- タイムゾーンを指定しない場合は、日本標準時になります。
-
相対表記の表現に誤りがあると、誤った日時に設定されることがあります。
そのため、相対表記の使用はおすすめできません。
またこれ以外の有名な事例では、日本では日付は年/月/日と表記しますが、アメリカでは月/日/年、ヨーロッパでは日/月/年という表記が主流であるため、海外の日付表記をそのまま入力すると、誤った日付になってしまうことがあります。
相対表記
macOSと同様に、相対表記も入力・出力で使用することができます。
ただし曜日・時制・時間・時差の解釈で勘違いが起きたり、記述ミスがあると誤った日時に設定されてしまったり、日付をまたいだときに不都合が生じることがあります。
そのため、相対表記の使用はおすすめしません。
なおこれらの表記は、Common Locale Data Repository (CLDR)のLocale Data Summary に準拠しているようです。
出力形式
この節では、間隔型変数の出力で使用できる相対表記を紹介します。
日付型変数で使用した場合、現在の日時との差を相対表記で出力します。
プロパティ「日付」が「相対」の場合
日時の範囲が下記以外の場合は、相対表示ではなく日付が出力されます。
- 一昨日
- 昨日
- 今日
- 明日
- 明後日
プロパティ「日付」が「経過時間/終了までの時間」の場合
-
- ○秒前
- 数字の範囲は、0~59です。
-
- ○分前
- 数字の範囲は、1~59です。
-
- ○時間前
- 数字の範囲は、1~59です。
-
- ○日前
- 数字の範囲は、1~6です。
-
- ○週間前
- 数字の範囲は、1~3です。
-
- ○年前
- 数字の範囲は、1~です。
-
- ○秒後
- 数字の範囲は、0~59です。
-
- ○分後
- 数字の範囲は、1~59です。
-
- ○時間後
- 数字の範囲は、1~59です。
-
- ○日後
- 数字の範囲は、1~6です。
-
- ○週間後
- 数字の範囲は、1~3です。
-
- ○年後
- 数字の範囲は、1~です。
入力形式
この節では、日付型変数・間隔型変数の入力で使用できる、相対表記を紹介します。
下記のほか、前述の出力形式の表記も使用できます。
なお相対表記の全貌を把握できていないため、ここでは筆者の検証で確認できたものだけを紹介します。
日単位
時刻を指定しない場合は午前12:00に、タイムゾーンを指定しない場合は日本標準時(GMT+09:00)に設定されます。
- 昨日・きのう
- 今日・今
- 明日・あす・あした
- 今週○曜日・今週○曜
-
- ○曜日・○曜
- 当日がその曜日であれば、翌週のその曜日の日付になります。
※これは英語圏由来の概念で、日本の考え方とは違うので注意が必要です。
- 来週○曜日・来週○曜
時間単位
●●には、昨日・今日などの、日単位の相対表記が入ります。
日付の相対単位を使わない場合、日付は今日になります。
なお時刻が1~11時台の場合、12時間制だと認識されてしまうため、アクションを実行した時刻により午前・午後のどちらかに自動で決定されます。
これを避けるには、午前・AMなどを付加してください。
-
- ○時○分○秒
- 今日の、指定された時刻になります。
○時半という表記も使えます。
-
- ●● ○時○分○秒・●●○時○分○秒・●●の○時○分○秒
- 指定された日の、指定された時刻になります。
ただし時が1~11で、なおかつ午後・PMなどが記載されていない場合は、12時間制だと解釈されるため、アクションを実行するタイミングにより午前・午後のどちらかになります。
-
- ▲ ○時○分○秒・▲○時○分○秒・▲の○時○分○秒
- 今日・明日の、指定され時刻になります。
▲には、朝・昼・夕方・夜・午前・午後が入ります。
12時間制で指定する際、午前・午後を明確化するために使います。
-
- ●● 朝・●●朝・●●の朝
- 指定された日の9:00になります。
-
- ●● 昼・●●昼・●●の昼
- 指定された日の12:00になります。
-
- ●● ▲・●●▲・●●の▲・今夜・今晩
- 指定された日の18:00になります。
▲には、夕方・夜・晩が入ります。
-
- 昨夜・前夜
- 前日の19:00になります。
※「今晩」・「今夜」とは時刻が異なります。
UNIX時間
これらの他によく使われている日時表記の一つに、UNIX時間(UNIX Time)があります。
iOSの内部でもUNIX時間は使われているのですが、ショートカットAppではこれを直接入力・出力する方法がありません。
しかし、ひと手間かけることでUNIX時間を入力・出力することができます。
詳細は、Tips&FAQのページを参照してください。