このデータが作成された日付を基準にして、いくつかのデータを辞書としてアプリに保存したいと思います。次のようになります。
// hours
[ 17:00 - 18:00 : 34.5,
18:00 - 19:00 : 41.2,
... ]
// days
[ 2017-11-19 - 2017-11-20 : 37.9,
2017-11-20 - 2017-11-21 : 31.1,
... ]
DateInterval
構造は、この辞書でキーのための完璧な候補であると思われます。しかし、いくつかの基本的なテストを実行したところ、Date()
initで作成された日付は特定の時点の正しい情報を表しているのに対し、DateInterval
fromの構造はCalendar.current
デフォルトでタイムゾーンとしてGMT + 0になっているように見えるため、次の出力が得られます。
let date = Date() //outputs "Nov 20, 2017 at 10:32 PM"
let hourInterval = Calendar.current.dateInterval(of: .hour, for: date)
//outputs: 2017-11-20 20:00:00 +0000 to 2017-11-20 21:00:00 +0000
つまり、私の/ユーザーのタイムゾーンから2時間ずれています。DateInterval
タイムゾーンがずれないように使用する正しい方法は何ですか?
iOSの日付の内部構造は常にGMTです。あなたが見ているのは文字列表現です。内部の日付はまだ互いに一貫しています。この遊び場コードを検討してください。
//: Playground - noun: a place where people can play
import UIKit
import XCTest
import PlaygroundSupport
let fourHours:Double = -1 * 60 * 60 * 4
var newDate = Date()
let oldDate = Date(timeInterval: fourHours, since: newDate)
let interval = DateInterval(start: oldDate, end: newDate)
let hourInterval = Calendar.current.dateInterval(of: .hour, for: newDate)
出力は次のようになります。
日付は現地時間(EST)として表示されますが、印刷可能な表現はGMTです。ただし、時間はオフセットされているため、「2017年11月20日午後4時14分EST」は「2017-11-20 21:14:09 + 0000」と同等です。いつでもDateIntervalから元の日付オブジェクトを取得できます。
hourInterval?.start
hourInterval?.end
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加