2017-04-19 11 views
3

文字列の配列が1つありますが、どうすればそれを現在のものよりもよく定義できますか?それは私のために働いているが、奇妙な外観の一種。もっと一般的なタイムラインの配列を定義する方が良い

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

関連する問題