【Swift】DateFormatterで日本時間を表示する

<h2 class="wp-block-heading"><span id="toc1">DateFormatterとは</span></h2>



<p><code>DateFormatter</code>は、<code>Date</code>オブジェクトと<code>String</code>オブジェクトの間で相互変換を行うために使用されるクラスです。<code>Date</code>オブジェクトは、日付と時間を表し、<code>String</code>オブジェクトは、テキストとして表現された日付と時間を表します。</p>



<p><code>DateFormatter</code>を使用すると、<code>Date</code>オブジェクトと<code>String</code>オブジェクトの変換に使用する形式を指定できます。日付や時間の表現方法は、言語や地域によって異なるため、<code>DateFormatter</code>を使用することで、ローカライズされた日付や時間の表現を取得することができます。</p>



<h2 class="wp-block-heading"><span id="toc2">例文</span></h2>



<p>まずは、<code>DateFormatter</code>を用いて日本時間に変換します。</p>



<p>以下のコードでは、<code>dateFormat</code>プロパティに<code>"yyyy/MM/dd HH:mm:ss"</code>というフォーマットを指定しています。</p>



<pre class="wp-block-preformatted hljs typescript"><code><span class="hljs-keyword">let</span> formatter = DateFormatter()</code>
<code>formatter</code>.locale = Locale(identifier: <span class="hljs-string">"ja_JP"</span>)<code>
formatter.dateFormat = <span class="hljs-string">"yyyy/MM/dd HH:mm:ss"</span>
formatter.timeZone = TimeZone(identifier: <span class="hljs-string">"Asia/Tokyo"</span>)
<span class="hljs-keyword">let</span> japanTime = formatter.string(<span class="hljs-keyword">from</span>: <span class="hljs-built_in">Date</span>())
print(japanTime)</code> <span class="hljs-comment">// </span><code><span class="hljs-comment">2022/05/01 12:34:56</span></code></pre>



<p><code>TimeZone(identifier:)</code>でタイムゾーンを指定することで、日本時間に変換することができます。</p>



<p>この場合、現在の日本時間が表示されます。</p>



<h2 class="wp-block-heading"><span id="toc3">応用</span></h2>



<h3 class="wp-block-heading"><span id="toc4">TimeZoneオブジェクト</span></h3>



<p><code>TimeZone</code>オブジェクトには、タイムゾーンを識別する文字列を指定することができます。この文字列は、オペレーティングシステムのタイムゾーンデータベースに存在するタイムゾーンのIDです。たとえば、「America/New_York」は、アメリカ東部夏時間のタイムゾーンを表します。これらのIDについては、公式の<a href="https://www.iana.org/time-zones">タイムゾーンデータベース</a>から確認できます。</p>



<p>個人的な主要都市を紹介します。</p>



<figure class="wp-block-table"><table><tbody><tr><td>Asia/Tokyo</td><td>日本標準時</td></tr><tr><td>America/New_York</td><td>アメリカの東部標準時</td></tr><tr><td>America/Los_Angeles</td><td>アメリカの太平洋標準時</td></tr><tr><td>Europe/London</td><td>イギリス標準時</td></tr><tr><td>Europe/Paris</td><td>中央ヨーロッパ標準時</td></tr><tr><td>Australia/Sydney</td><td>オーストラリアの東部標準時</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><span id="toc5">DateFormatterオブジェクト</span></h3>



<p><code>DateFormatter</code>オブジェクトを使用して、日付と時刻の書式を指定することもできます。上記の例では、「<code>yyyy-MM-dd HH:mm:ss</code>」という書式を指定しています。この場合、年、月、日、時間、分、秒を表す数字が表示されます。他の書式も<a href="https://developer.apple.com/documentation/foundation/dateformatter">公式ドキュメント</a>から確認できます。</p>



<p>個人的な主要なフォーマットを紹介します。</p>



<figure class="wp-block-table"><table><tbody><tr><td><code>yyyy</code></td><td>西暦</td></tr><tr><td><code>MM</code></td><td>月(0埋め)</td></tr><tr><td><code>dd</code></td><td>日(0埋め)</td></tr><tr><td><code>HH</code></td><td>時</td></tr><tr><td><code>mm</code></td><td>分</td></tr><tr><td><code>ss</code></td><td>秒</td></tr><tr><td><code>E</code></td><td>曜日</td></tr><tr><td></td><td></td></tr><tr><td><code>yyyy-MM-dd</code></td><td>2023-04-26</td></tr><tr><td><code>dd.MM.yyyy</code></td><td>26.04.2023</td></tr><tr><td><code>dd/MM/yyyy</code></td><td>26/04/2023</td></tr><tr><td><code>yyyy.MM.dd GGG</code></td><td>2023.04.26 AD</td></tr><tr><td><code>yyyy.MM.dd HH:mm:ss zzz</code></td><td>2023.04.26 10:15:30 GMT</td></tr><tr><td><code>EEE, dd MMM yyyy HH:mm:ss Z</code></td><td>Tue, 26 Apr 2023 10:15:30 +0000</td></tr><tr><td><code>MMMM dd, yyyy h:mm a</code></td><td>April 26, 2023 10:15 AM</td></tr><tr><td><code>yyyy年M月d日 H:mm</code></td><td>2023年4月26日 10:15</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><span id="toc6">Localeクラスのidentifierプロパティ</span></h3>



<p><code>Locale</code> クラスの <code>identifier</code> プロパティに、表示したい地域設定を指定することで、異なる地域の日付や時刻を表示することができます。地域設定の一覧は、<a href="https://gist.github.com/jacobbubu/1836273">こちらのリンク</a>を参照してください。</p>



<p>個人的な主要なものを紹介します。</p>



<figure class="wp-block-table"><table><tbody><tr><td><code>ja_JP</code></td><td>日本語 (Japan)</td></tr><tr><td><code>en_US</code></td><td>英語 (United States)</td></tr><tr><td><code>zh_CN</code></td><td>中国語 (China)</td></tr><tr><td><code>ko_KR</code></td><td>韓国語 (South Korea)</td></tr><tr><td><code>fr_FR</code></td><td>フランス語 (France)</td></tr><tr><td><code>es_ES</code></td><td>スペイン語 (Spain)</td></tr><tr><td><code>de_DE</code></td><td>ドイツ語 (Germany)</td></tr><tr><td><code>it_IT</code></td><td>イタリア語 (Italy)</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><span id="toc7">和暦表示方法</span></h3>



<p><code>DateFormatter</code>クラスには<code>Calendar</code>プロパティがあり、和暦を表す<code>Calendar</code>オブジェクトを指定することで和暦での表示が可能です。</p>



<p>以下は、和暦での日付表示の例です。</p>



<pre class="wp-block-preformatted hljs typescript"><span class="hljs-keyword">let</span> dateFormatter = DateFormatter()
dateFormatter.calendar = Calendar(identifier: .japanese)
dateFormatter.dateFormat = <span class="hljs-string">"GGGGy年M月d日"</span>

<span class="hljs-keyword">let</span> date = <span class="hljs-built_in">Date</span>()
<span class="hljs-keyword">let</span> dateString = dateFormatter.string(<span class="hljs-keyword">from</span>: date)

print(dateString) <span class="hljs-comment">// 令和5年4月26日</span></pre>



<p>上記の例では、<code>Calendar(identifier: .japanese)</code>で和暦を表す<code>Calendar</code>オブジェクトを作成しています。また、<code>dateFormat</code>には<code>GGGGy年M月d日</code>を指定しています。<code>GGGG</code>は元号を表し、<code>y</code>は和暦の年を表します。<code>M</code>は月、<code>d</code>は日を表します。</p>



<h3 class="wp-block-heading"><span id="toc8">DateFormatterのstyleプロパティ</span></h3>



<p>日付と時刻の書式を簡単に指定するためのオプションを提供します。以下は、主要なスタイルの説明です。</p>



<figure class="wp-block-table"><table><tbody><tr><td><code>.none</code></td><td>何もなし</td></tr><tr><td><code>.short</code></td><td>短い形式。例: 21/12/19 や 1:30 AM</td></tr><tr><td><code>.medium</code></td><td>中程度の形式。例: Dec 21, 2019 や 1:30:00 AM</td></tr><tr><td><code>.long</code></td><td>長い形式。例: December 21, 2019 や 1:30:00 AM GMT+9</td></tr><tr><td><code>.full</code></td><td>完全な形式。例: Saturday, December 21, 2019 や 1:30:00 AM Japan Standard Time</td></tr></tbody></table></figure>



<p>これらのスタイルは、指定された<code>Locale</code>に従って表示が変わります。<code>style</code>プロパティは、書式の定義に優先します。たとえば、<code>medium</code>スタイルを指定した場合でも、日付と時刻の書式を個別に指定できます。</p>

## 最後に
iOSアプリ開発をしています。
主にSwiftですが、最近は熱が入ってきてFlutterも🦾
色々やってます。もし良かったら見てってください。

https://sogablog.net/