文書   >   Foundation   >     Dates and Times   >   DateFormatter
クラス
DateFormatter
日付とそのテキスト表現とを変換するフォーマッタです。
概要
DateFormatter のインスタンスは、NSDate オブジェクトの文字列表現を作成し、日付と時間のテキスト表現を NSDate オブジェクトに変換します。DateFormatter には、ユーザーに日付と時間を見えるように表現するために、さまざまなローカライズされたプリセットと構成オプションを提供してています。日付と時間の固定書式表現では、カスタムの書式文字列を指定できます。
ISO 8601 書式の日付表現を使用する場合は、代わりに ISO8601DateFormatter を使用してください。
2 つの NSDate オブジェクト間の間隔を表すには、代わりに DateIntervalFormatter を使用して下さい。
NSDateComponents オブジェクトで指定された時間の量を表すには、代わりに DateComponentsFormatter を使用して下さい。
ユーザーに見える日付と時間の表現を使用
ユーザーに日付を表示するときは、必要に応じて日付フォーマッタの dateStyle プロパティと timeStyle プロパティを設定して下さい。たとえば、時間を表示せずに月、日、年を表示する場合は、dateStyle プロパティを DateFormatter.Style.long に設定し、timeStyle プロパティを DateFormatter.Style.none に設定します。逆に、時間だけを表示したい場合は、dateStyle プロパティを DateFormatter.Style.none に設定し、timeStyle プロパティを DateFormatter.Style.short に設定します。DateFormatter は、dateStyle プロパティと timeStyle プロパティの値に基づいて、与えられたロケールに適した、指定された日付の表現を提供します。
let dateFormatter = DateFormatter() dateFormatter.dateStyle = .medium dateFormatter.timeStyle = .none let date = Date(timeIntervalSinceReferenceDate: 118800) // US English Locale (en_US) dateFormatter.locale = Locale(identifier: "en_US") print(dateFormatter.string(from: date)) // Jan 2, 2001 // French Locale (fr_FR) dateFormatter.locale = Locale(identifier: "fr_FR") print(dateFormatter.string(from: date)) // 2 janv. 2001 // Japanese Locale (ja_JP) dateFormatter.locale = Locale(identifier: "ja_JP") print(dateFormatter.string(from: date)) // 2001/01/02
事前に定義されたスタイルを使用して達成できない書式を定義する必要がある場合は、setLocalizedDateFormatFromTemplate(_:) を使用して、テンプレートからローカライズされた日付書式を指定できます。
let dateFormatter = DateFormatter() let date = Date(timeIntervalSinceReferenceDate: 410220000) // US English Locale (en_US) dateFormatter.locale = Locale(identifier: "en_US") dateFormatter.setLocalizedDateFormatFromTemplate("MMMMd") // set template after setting locale print(dateFormatter.string(from: date)) // December 31 // British English Locale (en_GB) dateFormatter.locale = Locale(identifier: "en_GB") dateFormatter.setLocalizedDateFormatFromTemplate("MMMMd") // // set template after setting locale print(dateFormatter.string(from: date)) // 31 December
固定書式の日付表現での作業
MacOS 10.12 以降または iOS 10 以降では、ISO 8601 の日付表現を扱うときには ISO8601DateFormatter クラスを使用して下さい。
RFC 3339 などの固定書式の日付で作業する場合は、dateFormat プロパティを設定して書式文字列を指定します。ほとんどの固定書式では、locale プロパティーも POSIX ロケール ("en_US_POSIX") に設定し、timeZone プロパティーを UTC に設定する必要があります。
let RFC3339DateFormatter = DateFormatter()
RFC3339DateFormatter.locale = Locale(identifier: "en_US_POSIX")
RFC3339DateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
RFC3339DateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
/* 39 minutes and 57 seconds after the 16th hour of December 19th,
1996 with an offset of -08:00 from UTC (Pacific Standard Time) */
let string = "1996-12-19T16:39:57-08:00"
let date = RFC3339DateFormatter.date(from: string)
詳細については、テクニカルQ&A QA1480"NSDateFormatter とインターネットの日付" を参照してください。
スレッドの安全性
iOS 7 以降では、NSDateFormatter はスレッドセーフです。
MacOS 10.9 以降では、64ビットアプリで最新の動作を使用している限り、NSDateFormatter はスレッドセーフです。
以前のバージョンのオペレーティングシステムでは、または過去の書式の動作を使用している場合や、macOS で 32 ビットで動作している場合、NSDateFormatter はスレッドセーフではないため、複数のスレッドから同時に日付フォーマッタを変更してはいけません。
トピックス
オブジェクトの変換
func date(from: String) -> Date?
受信者の現在の設定を使用して解釈された、与えられた文字列の日付表現を返します。
func string(from: Date) -> String
受信者の現在の設定を使用してフォーマットされた、与えられた日付の文字列表現を返します。
指定された日付と時間のスタイルを使用して、現在のロケール用にフォーマットされた、与えられた日付の文字列表現を返します。
与えられた文字列の日付表現と使用された文字列の範囲を参照によって返し、文字列を解析できるかどうかを示すブール値を返します。
書式とスタイルの管理
var dateStyle: DateFormatter.Style
受信者の日付のスタイル。
var timeStyle: DateFormatter.Style
受信者の時間のスタイル。
受信者が使用する日付書式の文字列。
func setLocalizedDateFormatFromTemplate(String)
受信者用に指定されたロケールを使用して、テンプレートから日付書式を設定します。
class func dateFormat(fromTemplate: String, options: Int, locale: Locale?) -> String?
指定されたロケールに対して適切に配置された、与えられた日付書式のコンポーネントを表す、ローカライズされた日付書式の文字列を返します。
var formattingContext: Formatter.Context
日付の書式設定時に使用される大文字の書式設定コンテキスト。
属性の管理
受信者用のカレンダー。
受信者のデフォルトの日付。
受信者のロケール。
受信者のタイムゾーン。
2 桁の年指定子で表すことができる、最も早い日付です。
受信者のグレゴリオ暦の開始日。
動作バージョンの管理
var formatterBehavior: DateFormatter.Behavior
受信者のフォーマッタの動作。
class var defaultFormatterBehavior: DateFormatter.Behavior
クラスのインスタンスのデフォルトの書式動作を返します。
自然言語のサポートの管理
受信者が文字列を解析する際にヒューリスティックスを使用するかどうかを示すブール値。
var doesRelativeDateFormatting: Bool
受信者が日付コンポーネントに "today" や "tomorrow" などのフレーズを使用するかどうかを示すブール値。
AM と PM のシンボルの管理
受信者の AM のシンボル。
受信者の PM のシンボル。
平日のシンボルの管理
受信者の平日のシンボルの配列。
var shortWeekdaySymbols: [String]!
受信者の短い平日のシンボルの配列。
var veryShortWeekdaySymbols: [String]!
受信機の非常に短い平日のシンボルの配列。
var standaloneWeekdaySymbols: [String]!
受信者のスタンドアロンの平日のシンボルの配列。
var shortStandaloneWeekdaySymbols: [String]!
受信者の短いスタンドアロンの平日のシンボルの配列。
var veryShortStandaloneWeekdaySymbols: [String]!
受信機の非常に短いスタンドアロンの平日のシンボルの配列。
月のシンボルの管理
受信者の月のシンボル。
受信者の短い月のシンボルの配列。
var veryShortMonthSymbols: [String]!
受信者の非常に短い月のシンボル。
var standaloneMonthSymbols: [String]!
受信者のスタンドアロンの月のシンボル。
var shortStandaloneMonthSymbols: [String]!
受信者の短いスタンドアロンの月のシンボル。
var veryShortStandaloneMonthSymbols: [String]!
受信者の非常に短い月のシンボル。
四半期のシンボルの管理
受信者の四半期のシンボル。
var shortQuarterSymbols: [String]!
受信者の短い四半期のシンボル。
var standaloneQuarterSymbols: [String]!
受信者のスタンドアロンの四半期のシンボル。
var shortStandaloneQuarterSymbols: [String]!
受信者の短いスタンドアロンの四半期のシンボル。
紀元のシンボルの管理
受信者の紀元のシンボル。
受信者の長い紀元のシンボル。
定数
以下の定数は、日付と時間の事前に定義された書式スタイルを指定します。
NSDateFormatter の動作を指定する定数です。
インスタンスプロパティ
var generatesCalendarDates: Bool
このプロパティは使うべきではありません。
関連
以下からの継承
Formatter
以下への準拠
以下も見よ
日付の書式設定
class DateComponentsFormatter
時間量の文字列表現を作成するフォーマッタ。
class DateIntervalFormatter
時間間隔の文字列表現を作成するフォーマッタ。
日付とその ISO 8601 文字列表現の間を変換するフォーマッタ。