33

私は iPhone 用の Objective C を使用しており、NSDate をフル スタイルで表示したいのですが、年は表示しません。現在、以下のコードを使用していますが、年も表示されていますが、それは望ましくありません。日付を適切な地域形式で表示したいので、一部の国では年が最後ではなく、途中または最初になるため、最後の年を削除することはできません。

NSDate *testdate = [NSDate date];
NSDateFormatter *dateFormattertest = [[NSDateFormatter alloc] init];
[dateFormattertest setDateStyle:NSDateFormatterFullStyle];
[dateFormattertest setTimeStyle:NSDateFormatterNoStyle];
NSString *formattedDateString = [dateFormattertest stringFromDate:testdate];
NSLog(formattedDateString);

In US this give me:
Thursday, January 14, 2010

In Sweden this give me:
torsdag, 2010 januari 14

これに対する解決策は何ですか?もう 1 つの質問ですが、NSDateFormatter の setDateFormat の使用方法に関する情報はどこにありますか? API でさまざまな文字が何を表しているかについての情報が見つかりません。

4

6 に答える 6

9

Swift 拡張機能に対する @Joss の優れた回答を受け取りました。

extension NSDate {
    func formattedFromCompenents(styleAttitude: NSDateFormatterStyle, year: Bool = true, month: Bool = true, day: Bool = true, hour: Bool = true, minute: Bool = true, second: Bool = true) -> String {
        let long = styleAttitude == .LongStyle || styleAttitude == .FullStyle
        var comps = ""

        if year { comps += long ? "yyyy" : "yy" }
        if month { comps += long ? "MMMM" : "MMM" }
        if day { comps += long ? "dd" : "d" }

        if hour { comps += long ? "HH" : "H" }
        if minute { comps += long ? "mm" : "m" }
        if second { comps += long ? "ss" : "s" }

        let format = NSDateFormatter.dateFormatFromTemplate(comps, options: 0, locale: NSLocale.currentLocale())
        let formatter = NSDateFormatter()
        formatter.dateFormat = format
        return formatter.string(from: self)
    }
}
于 2015-06-25T12:39:52.847 に答える