回答編集履歴

1

dateFormatの指定に冗長なところがあったので、コードを改善し、説明を追加しました。

2020/08/14 13:50

投稿

eytyet
eytyet

スコア803

test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  df.locale = Locale(identifier: "ja_JP")
6
6
 
7
- df.dateFormat = DateFormatter.dateFormat(fromTemplate: "EEEE", options: 0, locale: .current)
7
+ df.dateFormat = "cccc"
8
8
 
9
9
  print("(df.string(from: Date()))")
10
10
 
@@ -12,4 +12,24 @@
12
12
 
13
13
 
14
14
 
15
- playgroundで、"金曜日"と出力されました
15
+ 上記で、playgroundで、"金曜日"と出力されました。
16
+
17
+
18
+
19
+ `df.locale`でロケールを指定して、`df.dateFormat`に変換するときのフォーマット文字列を指定すると、それらに従って`df.string(from:)`で整形された文字列が得られます。
20
+
21
+
22
+
23
+ フォーマット文字列は、[こちらに詳細な定義がありますが](http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns)、どういう形式にするかを指定するものです。
24
+
25
+
26
+
27
+ `DateFormatter.dateFormat(fromTemplate: "EEEE", options: 0, locale: Locale(identifier: "ja_JP"))`は、"cccc"という値を返してきます。
28
+
29
+ このクラスメソッドは、指定したロケールに最適なフォーマット文字列を返すものです。ここでのロケールはフォーマット文字列を選ぶのに適用され、実際に変換するときのロケールを指定しているのではありません。
30
+
31
+ 変換するときのロケールは、`DateFormatter`の`locale`に指定します。
32
+
33
+
34
+
35
+ なお、上記ページをみると、"EEEE"も"cccc"も同じ結果が得られるので、どちらでもよいと思います。