Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift NSDate startOfDay是凌晨4点?_Swift_Nscalendar - Fatal编程技术网

Swift NSDate startOfDay是凌晨4点?

Swift NSDate startOfDay是凌晨4点?,swift,nscalendar,Swift,Nscalendar,我试图在给定的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)

我试图在给定的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))
6月的结果为“2017-06-21 04:00:00 UTC”。从技术上讲,这是正确的,我的本地日是UTZ的凌晨4点,但我传递到的代码,来自天文年鉴,已经处理了本地/全局转换

于是我尝试了这个:

    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

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

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