回答編集履歴

1

日付が変わる時刻(23時)についてのコードを追記しました。

2022/06/21 08:32

投稿

退会済みユーザー
test CHANGED
@@ -8,3 +8,42 @@
8
8
  「2022-06-17 15:00:00 +0000」は日本標準時の2022年6月18日0時ですが、
9
9
  「2022-06-18 00:00:00 +0000」は日本標準時の2022年6月18日9時になってしまうと思います。
10
10
 
11
+ ---
12
+
13
+ コメントありがとうございます。
14
+ 追記です。
15
+
16
+ > 「20220618」という時間情報がないString
17
+ この認識は大切かもしれませんね。
18
+ Date型は内部的にはUTCで時刻を保持している感じですが、
19
+ タイムゾーンのことを意識しなくても済むようにしてくれるみたいです。
20
+ ですので、日付を扱うところはDate型で統一して扱う感じにして、
21
+ 画面に表示するようなところでタイムゾーンを考慮して変換してあげる感じになるのでしょうか。
22
+
23
+ > 1日ズレることになりませんかね?
24
+ ちょっと確認してみました。
25
+
26
+ ```swift
27
+ let calendar = Calendar.current
28
+ let formatter = DateFormatter()
29
+ formatter.dateFormat = DateFormatter.dateFormat(fromTemplate: "yyyy-MM-dd HH:mm:ss", options: 0, locale: Locale(identifier: "ja_JP"))
30
+
31
+ let d1 = formatter.date(from: "2022-06-18 08:00:00")!
32
+ print(d1) // 2022-06-17 23:00:00 +0000
33
+ print(formatter.string(from: d1)) // 2022/06/18 8:00:00
34
+
35
+ // UTCでは23時(前日扱い)になるDateから日付部分だけを取り出して確認
36
+ let c1 = calendar.dateComponents([.year, .month, .day], from: d1)
37
+ let d2 = calendar.date(from: c1)!
38
+ print(d2) // 2022-06-17 15:00:00 +0000
39
+ print(formatter.string(from: d2)) // 2022/06/18 0:00:00
40
+ ```
41
+
42
+ UTCでは23時で前日になるとしても、
43
+ 日付部分だけを取り出すと、
44
+ (処理しているPCのタイムゾーンをうまく考慮してくれているみたいで?)
45
+ 6月18日として扱ってくれました。
46
+
47
+ > 以下のコードの応用でJST形式でprintすることはできました!
48
+ ちゃんと自分で試して理解しているようで何よりです!
49
+