我刚开始使用Swift 3.0日历方法startOfDay。它在大多数情况下都很好用,但有时在返回的日期已经返回了凌晨3点的时间。我从web服务,其中我从一个Unix风格串使用下述方法转化得到一个productionDateSwift 3.0 - 日历startOfDay方法返回3am
static let dateFormatString = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
static func dateForDateString(dateString: String) -> Date?
{
let formatter = DateFormatter()
formatter.dateFormat = dateFormatString
return formatter.date(from: dateString)
}
例日期/时间字符串
2017-03-01T09:38:05-05:00
我然后保存的整数值( timeIntervalSince1970)到Firebase,在那里我可以看到不正确的日期为凌晨3点。下面是一个代码片段,我使用生成我保存到火力
let startofDay = Calendar.current.startOfDay(for: productionDate)
let dateValue = Int(startofDay.timeIntervalSince1970)
就像我说的int值,大部分的时间,时间结束是正确的日期的午夜,但是当应用程序是在后台从Web服务中获取,我偶尔会看到凌晨3点进入Firebase数据库。
我知道我没有在这里提供大量的信息。我真的希望有人遇到同样的问题,并想出办法解决问题,或者有人可以看看我的代码,告诉我我是如何成为笨蛋。
谢谢!
您可能将UTC与当前时区混合在一起。 –
@Robert我在Web服务有效载荷中获得了像'America/New_York'这样的时区字符串值,所以我将使用它来初始化DateFormatter。谢谢! – Moebius
你为什么想要获得startOfDay?如果您需要日历计算的日期,最好使用中午(12点)。每天有12点但不是每天都有12点。 –