回答編集履歴
1
日付が変わる時刻(23時)についてのコードを追記しました。
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
|
+
|