teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

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

2020/08/14 13:50

投稿

eytyet
eytyet

スコア803

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