web-dev-qa-db-ja.com

NSDateFormatter形式の文字列でカスタムテキストを追加することは可能ですか?

日付を次のようにしたいとします。

|1988|December|30|

これらをdateFormatterに追加するにはどうすればよいですか、さらに言えば、フォーマットを次のようにします。

30 in the month of December in the year of 1998

今は1988年12月30日、標準フォーマットを使いたいのですが、入れたテキストも一緒に入れたいです。

特に上記の場合、フォーマットとパイプは、フォーマットとパイプの間にスペースがない日付または月の日付フォーマットに隣接します。

フォーマットを設定するだけでこれは可能ですか?

31

たとえば、任意のテキスト(一重引用符で囲む)を日付形式で挿入できます。

NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
[fmt setDateFormat:@"dd' in the month of 'MMMM' in the year of 'yyyy"];
NSString *s = [fmt stringFromDate:[NSDate date]];

結果:

 2013年の7月の09 
77
Martin R

Swiftバージョン:

let dateFormatter = DateFormatter()
dateFormatter.dateFormat =  "EEEE' text here 'h:mm' and there 'a"
5
Joseph Francis

iOS 13用に更新、Swift 5、Xcode 11、Martin Rの回答に基づいて構築

let dateFormatter = DateFormatter()
dateFormatter.timeZone = TimeZone.current
dateFormatter.locale = Locale.current
dateFormatter.dateFormat = "dd' in the month of 'MMMM' in the year of 'yyyy"
let stringDate = dateFormatter.string(from: Date())
print(stringDate)

// printed:
// 7 in the month of October in the year of 2019

P.S.アポストロフィが必要な場合は、次を使用します:''文字列内に直接。例えば ​​"MMM d, ''yy"-> Nov 10, '19

拡張:

序数標識も追加したい場合(たとえば、「13th」の後の「th」)、実際には日付フォーマッター文字列内で追加できます。

だからあなたが望むならNov 10th、コードは次のようになります。

/// Get date.
let date = Date()

/// Get just the day of the date. 
let dayAsInt = Calendar.current.component(.day, from: date)

/// Init the formatter.
let dateFormatter = DateFormatter()

/// Set the format string.
/// Notice we include the 'MMM' to extract the month from the date, but we use a variable to get the 'th' part.
dateFormatter.dateFormat = "MMM '\(dayAsInt.getStringWithOrdinalIndicatorIfPossible)'"
let formattedDate = dateFormatter.string(from: date)

/// Will print out Nov 10th or Apr 1st or whatever.

これが私が助けるために作った拡張です:

/// This variable only adds the ordinal indicator if the Int that is calling this function can be converted to an NSNumber.
/// An ordinal indicator is the `rd` after `3rd` or the `st` after `1st`.
var getStringWithOrdinalIndicatorIfPossible: String {
    let formatter = NumberFormatter()
    formatter.numberStyle = .ordinal
    return formatter.string(from: NSNumber(value: self)) ?? "\(self)"
}
0
Akash Kundu