2017-01-14 2 views
0

나는 자정에 시작하여 자정 전에 10 분에 끝나는 주어진 24 시간의 10 분마다 루프를 작성하려고합니다. 그래서이 시도 ... june에 대한NSDate startOfDay가 4AM입니까?

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)) 

결과는 "2017년 6월 21일 세계 협정시 04시 00분 0초"입니다. 이제 기술적으로 이것은 정확합니다. 현지 시간은 오전 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)) 

이것은 동일한 결과를 생산 :

그래서 나는이 시도. 내가 뭘 놓치고 있니?

답변

3

이 날짜 포맷은 할당 된 달력의 시간대를 사용하고 예상 결과를 만드는 코드에

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 
+0

가장 우수! –