未正确读取域NSDate

未正确读取域NSDate,date,swift3,realm,realm-browser,Date,Swift3,Realm,Realm Browser,我的情况如下:我从一个API调用中获得一个票证信息,我可以在我的领域浏览器中看到,我激活票证的日期和到期日期正确地保存在UTC的数据库中 在数据库中,使用领域浏览器,我可以看到开始时间是2017年4月25日下午1:45:30,结束时间是2017年4月26日上午6:45:30。(激活我的票证时,我的本地时间是上午9:45:30-因此这是服务器端的正确设置) 然而,当我稍后在代码中访问那个日期并从数据库中检索它时,它会给我一个带有偏移量的日期!!!(不,它不是本地时区中的日期-它应该是UTC中保存的

我的情况如下:我从一个API调用中获得一个票证信息,我可以在我的领域浏览器中看到,我激活票证的日期和到期日期正确地保存在UTC的数据库中

在数据库中,使用领域浏览器,我可以看到开始时间是2017年4月25日下午1:45:30,结束时间是2017年4月26日上午6:45:30。(激活我的票证时,我的本地时间是上午9:45:30-因此这是服务器端的正确设置)

然而,当我稍后在代码中访问那个日期并从数据库中检索它时,它会给我一个带有偏移量的日期!!!(不,它不是本地时区中的日期-它应该是UTC中保存的日期)

下面是我用来从数据库获取信息并显示它的一些代码:

func getTickets() -> [Ticket] {
        let tickets = userInfo?.tickets.filter("state == %@", "activated").map({ (dbTicket) -> Ticket in
            var startTime: Date? = nil
            var endTime: Date? = nil
            if let start = dbTicket.startTime, let end = dbTicket.endTime {
                print("START ", dbTicket.startTime,
                    "\nNOW ", NSDate(),
                    "\nEND ", dbTicket.endTime)
                startTime = start as Date
                endTime = end as Date
            }
            print("START ", dbTicket.startTime,
                  "\nNOW ", Date(),
                  "\nEND ", dbTicket.endTime)
            return Ticket(id: dbTicket.id, startTime: startTime, endTime: endTime)
        }) ?? []
        return tickets
    }
以下是控制台中打印的内容:

START  Optional(2017-04-25 17:45:30 +0000) 
NOW  2017-04-25 13:46:15 +0000 
END  Optional(2017-04-26 10:45:30 +0000)

START  Optional(2017-04-25 17:45:30 +0000) 
NOW  2017-04-25 13:46:15 +0000 
END  Optional(2017-04-26 10:45:30 +0000)

这是不对的!开始应该和现在差不多。那个么,为什么从领域数据库中读取的开始日期和结束日期不正确呢?尤其是我可以在领域浏览器中看到,并且在那里它们被正确保存。

NSDate
表示一个特定的时间点,与任何时区无关。时区与
NSDate
关联的唯一时间是在创建其字符串表示形式时(在您的情况下,当
print
最终调用
-[NSDate description]
时会发生这种情况)。如果要控制日期的格式化时区,可以使用
NSDateFormatter
NSDate
显式转换为字符串,从而控制所使用的时区