【问题标题】:Realm NSDate is not read correctly未正确读取领域 NSDate
【发布时间】:2017-04-25 13:58:35
【问题描述】:

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

在数据库中,使用 Realm Browser,我可以看到 startTime 是 Apr 25, 2017, 1:45:30 PM,endTime 是 Apr 26, 2017, 6:45:30 AM。 (在激活我的票时,我的当地时间是上午 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)

这是不正确的! START 应该与 NOW 几乎相同。那么为什么从 Realm 数据库中读取的 START 和 END 日期不正确呢?尤其是我可以在 Realm Browser 中看到它们并正确保存。

【问题讨论】:

    标签: date swift3 realm realm-browser


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-05
      相关资源
      最近更新 更多