更新:2021-11-06
作成:2020-08-02

日時の形式

日時関連のアクションでは、さまざまな日時の表記を使用することができます。
この章では、日時の表記形式について説明します。

日時

詳細は後述しますが、たとえば出力では以下のような表記が使用できます。

また、入力では前述の形式に加え、以下のような幅広い表記が使用できます。
ただし後述のように、バグの元にもなるため注意が必要です。

  • 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クラスと同じ書式です。
ただし和暦には対応していないなどの違いがあり、完全に同一ではないようです。



※出力例は、日時が2020年4月1日水曜日 20時7分42秒180(日本標準時)の場合
書式指定子 出力例 説明
G 西暦 暦の種類西暦を出力します。
GG
GGGGG AD 暦の種類を英語の略記で、AD(紀元)、もしくはBC(紀元前)で出力します。
y 2020 4桁表記で、西暦年を出力します。
Y 2020 4桁表記で、西暦年を出力します。
指定された日が属する週が年をまたぐときには、前年として扱います。
u 2020 西暦年を出力します。
紀元前はマイナス値になります。
yy 20 2桁表記で、西暦年を出力します。
YY 20 2桁表記で、西暦年を出力します。
指定された日が属する週が年をまたぐときには、前年として扱います。
これはwやwwと一緒に使うときに使います。
四半期 Q 2 四半期単位の数字を出力します。
QQ 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形式などのような規格で定められた日時表記の使用を、おすすめします。

特に注意が必要なものとしては、以下があります。

またこれ以外の有名な事例では、日本では日付は年/月/日と表記しますが、アメリカでは月/日/年、ヨーロッパでは日/月/年という表記が主流であるため、海外の日付表記をそのまま入力すると、誤った日付になってしまうことがあります。

相対表記

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などを付加してください。

UNIX時間

これらの他によく使われている日時表記の一つに、UNIX時間(UNIX Time)があります。
iOSの内部でもUNIX時間は使われているのですが、ショートカットAppではこれを直接入力・出力する方法がありません。
しかし、ひと手間かけることでUNIX時間を入力・出力することができます。
詳細は、Tips&FAQのページを参照してください。