12

したがって、私の意図は、次のような日付を出すことです。

Today, August 28
Tomorrow, August 29
Friday, August 30
...etc

問題は、私がとても近くにしかできないように見えることです.

IsetDoesRelativeDateFormatting:YESsetDateStyletoFullsetTimeStyletoNoneの場合、次のような結果が得られます。

Today
Tomorrow
Friday, August 30, 2013

これは年を返しますが、今日と明日の月と日付は返しません。

私が試した他のコードは次のとおりです。

[NSDateFormatter dateFormatFromTemplate:@"eeeedMMM" options:0
                                                     locale:[NSLocale currentLocale]];

そして、それは以下をもたらします:

Wednesday, August 28
Thursday, August 29
Friday, August 30

どうやら、dateStyle と timeStyle、または相対日付形式がカスタム形式をオーバーライドしているようです。

カスタム実装を行わずにこの日付形式を実現する方法はありますか?

前もって感謝します!

4

3 に答える 3

3

Swift 3 でこのアプローチを使用します。

struct SharedFormatters {
    private static let dateWithRelativeFormatting: DateFormatter = {
        let df = DateFormatter()
        df.dateStyle = .medium
        df.doesRelativeDateFormatting = true
        return df
    }()
    private static let dateWithoutRelativeFormatting: DateFormatter = {
        let df = DateFormatter()
        df.dateStyle = .medium
        df.doesRelativeDateFormatting = false
        return df
    }()
    private static let longDateWithoutYear: DateFormatter = {
        let df = DateFormatter()
        df.dateFormat = "MMMM d"
        df.doesRelativeDateFormatting = false
        return df
    }()
    static func string(from date: Date) -> String {
        let val = dateWithRelativeFormatting.string(from: date)
        let val2 = dateWithoutRelativeFormatting.string(from: date)
        return val == val2 ? longDateWithoutYear.string(from: date) : val
    }
}
于 2016-10-23T11:20:45.513 に答える