Swift 的 DateInterval 中的时区不正确
Incorrect timezone in Swift's DateInterval
我想在我的应用程序中将一些数据存储为与该数据创建日期相关的字典。它应该看起来像这样:
// 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,
... ]
A DateInterval
结构似乎是这本词典中关键字的完美候选者。但是当我 运行 进行一些基本测试时,我发现虽然使用 Date()
init 创建的日期代表了给定时刻的正确信息,但 Calendar.current
中的 DateInterval
结构似乎是默认为 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
所以现在比 my/user 的时区晚 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),但可打印的表示形式为格林威治标准时间。虽然时间是偏移的,所以 'Nov 20, 2017 at 4:14 PM EST' 相当于 '2017-11-20 21:14:09 +0000'。您始终可以使用
从 DateInterval 检索原始日期对象
hourInterval?.start
hourInterval?.end
我想在我的应用程序中将一些数据存储为与该数据创建日期相关的字典。它应该看起来像这样:
// 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,
... ]
A DateInterval
结构似乎是这本词典中关键字的完美候选者。但是当我 运行 进行一些基本测试时,我发现虽然使用 Date()
init 创建的日期代表了给定时刻的正确信息,但 Calendar.current
中的 DateInterval
结构似乎是默认为 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
所以现在比 my/user 的时区晚 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),但可打印的表示形式为格林威治标准时间。虽然时间是偏移的,所以 'Nov 20, 2017 at 4:14 PM EST' 相当于 '2017-11-20 21:14:09 +0000'。您始终可以使用
从 DateInterval 检索原始日期对象hourInterval?.start
hourInterval?.end