2017-03-01 119 views
0

我刚开始使用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数据库。

我知道我没有在这里提供大量的信息。我真的希望有人遇到同样的问题,并想出办法解决问题,或者有人可以看看我的代码,告诉我我是如何成为笨蛋。

谢谢!

+0

您可能将UTC与当前时区混合在一起。 –

+0

@Robert我在Web服务有效载荷中获得了像'America/New_York'这样的时区字符串值,所以我将使用它来初始化DateFormatter。谢谢! – Moebius

+0

你为什么想要获得startOfDay?如果您需要日历计算的日期,最好使用中午(12点)。每天有12点但不是每天都有12点。 –

回答

-3

我终于能够重现这个问题,它与startOfDay返回上午3点时间无关。我发布了另一个问题,试图找出真正问题的答案。

+0

薄如何答案-.- –