我试着在给定的24小时内每10分钟写一个循环,从午夜开始,到午夜前10分钟结束。所以我试过这个。。。

    let x = Calendar.current.component(.year, from: Date())
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat="dd-MM-yyyy"
    let june = dateFormatter.date(from: "21-06-" + String(x))

june的结果是“2017-06-21 04:00:00 UTC”。从技术上讲,这是正确的,我的当地时间是4点UTZ,但是我正在传递的代码,来自天文年历,已经处理了本地/全局转换。
所以我试着说:
    var UTZCal = Calendar.current
    UTZCal.timeZone = TimeZone(abbreviation: "GMT")!
    let x = UTZCal.component(.year, from: Date())
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat="dd-MM-yyyy"
    dateFormatter.calendar = UTZCal
    let june = dateFormatter.date(from: "21-06-" + String(x))

这产生了完全相同的结果。我错过了什么?

最佳答案

日期格式化程序似乎没有使用
分配日历,并添加

dateFormatter.timeZone = UTZCal.timeZone

使它产生预期的结果。但请注意你
可以简化计算
var utzCal = Calendar(identifier: .gregorian)
utzCal.timeZone = TimeZone(secondsFromGMT: 0)!

let year = utzCal.component(.year, from: Date())
let june = DateComponents(calendar: utzCal, year: year, month: 6, day: 21).date!
print(june) // 2017-06-21 00:00:00 +0000

关于swift - NSDate startOfDay是4AM?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41649923/

10-10 05:36