2017-04-19 1 views
3

문자열 배열 하나가 있는데 현재보다 더 잘 정의 할 수 있습니까? 그것은 나를 위해 일하고 있지만 이상하게 보입니다.좀 더 일반적인 방법으로 타임 라인 배열을 정의하는 더 나은 방법

var arrTimelineEntry = ["12 am", "1 am", "2 am", "3 am", "4 am", "5 am", "6 am", "7 am","8 am", "9 am", "10 am", "11 am","12 pm", "1 pm", "2 pm", "3 pm", "4 pm", "5 pm", "6 pm", "7 pm", "8 pm", "9 pm", "10 pm", "11 pm"] 
+0

문자열의 순서는 그대로 유지해야합니까? –

+0

@AhmadF 예 주문은 그대로해야합니다. –

답변

1

아마 당신은이 같은 모든 일의 시간을 가져 오도록 Dateextension를 사용할 수 있습니다. 또한 특정 요구 사항에 맞게 쉽게 사용자 정의 할 수 있으며 하드 코딩되지 않습니다.

extension Date { 
var startOfDay: Date { 
    return Calendar.current.startOfDay(for: self) 
} 

static func dayHours() -> [String] { 
    var hours = [String]() 
    var today = Date(timeIntervalSince1970: 1492674841).startOfDay 

    let dateFormatter = DateFormatter() 
    dateFormatter.locale = NSLocale.current 
    dateFormatter.dateFormat = "h a" 
    dateFormatter.amSymbol = "am" 
    dateFormatter.pmSymbol = "pm" 

    for _ in 0...23 { 
     let dateString = dateFormatter.string(from: today) 
     hours.append(dateString) 
     today.addTimeInterval(3600) 
    } 

    return hours 
} 

}

사용법 :

Date.dayHours() 
+0

잘 작동하면 문제가 해결됩니다. 감사. –

+0

이 줄을 이해할 수 없음 Date (timeIntervalSince1970 : 1492674841) .startOfDay. 매개 변수에 전달 된 정적 값을 자세히 설명해 주시겠습니까? –

+0

@ParthAdroja이 정적 값은 DST 시간을 피하고 잘못된 시간 인쇄를 방지하는 데 사용됩니다. –

5

다음 포맷이 다른 로케일과 언어에 적용됩니다.

let calendar = Calendar.current 
let date = Date() //choose date on which DST never happened 

let formatter = DateFormatter() 
    formatter.dateFormat = DateFormatter.dateFormat(fromTemplate: "jm", options: 0, locale: NSLocale.current) 

let dates = (0...23).map { (hour) in 
    return calendar.date(bySettingHour: hour, minute: 0, second: 0, of: date)! 
} 

let timeLine = dates.map(formatter.string) 
+0

답변도 함께 사용하십시오. 감사. –

+1

salabaha, 이것은 좋은 대답입니다 (다른 답변과 달리 현지화되었습니다). 그러나 일광 절약 (예 : 미국의 경우 2018 년 3 월 11 일)을 위해 "앞으로 나아갈"날에는 제대로 작동하지 않을 것이라고하는 문제가 있습니다. 'Date()'를 사용하는 대신, 일광 절약 시간 조절을 할 수 없다는 것을 알고있는 날짜를 사용할 수 있습니다. – Rob

관련 문제