Date
カレンダーやタイムゾーンとは関係なく、特定の時点。
Declaration
struct Date
Overview
Date値は、特定のカレンダシステムやタイムゾーンとは無関係に、単一の時点をカプセル化します。 日付値は、絶対参照日を基準とした時間間隔を表します。
Date構造体は、日付を比較し、2つの日付間の時間間隔を計算し、そして別の日付に対する時間間隔から新しい日付を作成するためのメソッドを提供します。 DateFormatterインスタンスと一緒に日付値を使用して日付と時刻のローカライズされた表現を作成し、Calendarインスタンスと一緒にカレンダー演算を実行します。
日付はNSDateクラスにブリッジします。 Objective-CのAPIと相互作用するコードでこれらを互換的に使用できます。
Topics
Creating a Date 日付けを作成する
init()
現在の日時に初期化された日付値を作成します
init(timeIntervalSinceNow: TimeInterval)
指定された秒数で現在の日時を基準にして初期化された日付値を作成します。
init(timeInterval: TimeInterval, since: Date)
指定された秒数で、他の指定された日付に対して初期化された日付値を作成します。
timeInterval : 日付に追加する秒数。 負の値は、受信者が日付より早くなることを意味します。
date : 参照日
init(timeIntervalSinceReferenceDate: TimeInterval)
指定された秒数で2001年1月1日の00:00:00 UTCを基準に初期化された日付値を作成します。
init(timeIntervalSince1970: TimeInterval)
指定された秒数で、1970年1月1日の00:00:00 UTCを基準にして初期化された日付値を作成します。
Getting Temporal Boundaries 時間境界を得る
static let distantFuture: Date
遠い未来の日付を表す日付値。
Discussion
遠い未来は何世紀にもわたる。
static let distantPast: Date
過去の過去の日付を表す日付値。
Discussion
遠い過去は何世紀にもわたる。
Comparing Dates 日付を比較する
static func < (Date, Date) -> Bool
左側の日付が右側の日付より時間的に早い場合にtrueとなるブール値を返します。
static func == (Date, Date) -> Bool
2つの日付値が同じ時点を表す場合はtrueを返します。
func compare(Date) -> ComparisonResult
2つの日付値を比較します
Getting Time Intervals 時間を取得
func timeIntervalSince(Date) -> TimeInterval
受信者と別の指定された日付の間の間隔を返します。
パラメーター : 受信者を比較する日付。
戻り値 : 受信者と他のパラメータ間の間隔。 受信側がanotherDateより前の場合、戻り値は負です。 anotherDateがnilの場合、結果は未定義です。
var timeIntervalSinceNow: TimeInterval
日付値と現在の日時の間の時間間隔。
Discssion : 日付が現在の日時より早い場合、このプロパティの値は負になります。
var timeIntervalSinceReferenceDate: TimeInterval
2001年1月1日の日付値と00:00:00 UTCの間の間隔。
Discussion : 日付オブジェクトがシステムの絶対参照日(2001年1月1日の00:00:00 UTC)より早い場合、このプロパティの値は負になります。
var timeIntervalSince1970: TimeInterval
日付値と1970年1月1日の00:00:00 UTCの間の間隔。
Discussion : 日付オブジェクトが1970年1月1日のUTC 00:00:00より前の場合、このプロパティの値は負になります。
static var timeIntervalSinceReferenceDate: TimeInterval
2001年1月1日のUTC 00:00:00から現在の日時までの間隔。
static let timeIntervalBetween1970AndReferenceDate: TimeInterval
1970年1月1日から基準日の2001年1月1日までの秒数。
Adding or Subtracting a Time Interval 時間間隔の加算又は減算
static func != (Date, Date) -> Bool
2つの値が等しくないかどうかを示すブール値を返します。
static func + (Date, TimeInterval) -> Date
指定された時間が追加された日付を返します。
static func += (inout Date, TimeInterval)
日付に時間間隔を追加します。
Discussion : 警告! これは絶対値を調整するだけです。 時間、日、月などのカレンダーの概念を追加したい場合は、カレンダーを使用する必要があります。 これは、夏時間、日数の異なる月などの複雑さを考慮に入れます。
static func - (Date, TimeInterval) -> Date
指定した時間を引いた日付を返します。
static func -= (inout Date, TimeInterval)
日付から時間間隔を引きます。
Discussion : 警告! これは絶対値を調整するだけです。 時間、日、月などのカレンダーの概念を追加したい場合は、カレンダーを使用する必要があります。 これは、夏時間、日数の異なる月などの複雑さを考慮に入れます。
static func < (Date, Date) -> Bool
左側の日付が右側の日付より時間的に早い場合にtrueとなるブール値を返します。
static func <= (Date, Date) -> Bool
最初の引数の値が2番目の引数の値以下であるかどうかを示すブール値を返します。
Discussion : これは、Comparableに準拠するすべての型の小なりまたは等しい演算子(<=)のデフォルト実装です。
static func == (Date, Date) -> Bool
2つの日付値が同じ時点を表す場合はtrueを返します。
static func >= (Date, Date) -> Bool
最初の引数の値が2番目の引数の値以上であるかどうかを示すブール値を返します。
Discussion : これは、Comparableに準拠する任意の型に対する、以上の演算子(> =)のデフォルト実装です。
Describing Dates 日付を記述する
var description: String
日付値の説明文。
Discussion : この表現はデバッグにのみ役立ちます。
日付のフォーマット文字列を取得するには、日付フォーマッタ( 『NSDateFormatter and Data Formatting Guide』を参照)、Date関数の説明(locale :)など、多数のオプションがあります。
func description(with: Locale?) -> String
与えられたロケールを使って日付の文字列表現を返します。
戻り値 : 指定されたロケールを使用する、またはlocale引数がnilの場合は、国際形式YYYY-MM-DDでのDateの文字列表現HH:MM:SS±HHMM。ここで、±HHMMは、タイムゾーンオフセットを時間と分で表したものです。 UTC(たとえば、 "2001-03-24 10:45:32 +0600")。
var debugDescription: String
デバッグに適した日付の説明文。
var customMirror: Mirror
日付を反映した鏡。
var hashValue: Int
日付の計算されたハッシュ値
Using Reference Types 参照型の使い方
class NSDate
Dateに橋渡しする特定の時点の表現。 参照セマンティクスまたはその他のFoundation固有の動作が必要な場合は、NSDateを使用してください。
概要
NSDateオブジェクトは、特定のカレンダシステムやタイムゾーンとは関係なく、単一の時点をカプセル化します。日付オブジェクトは不変で、絶対参照日(2001年1月1日の00:00:00 UTC)を基準とした不変の時間間隔を表します。
NSDateクラスは、日付を比較し、2つの日付間の時間間隔を計算し、そして別の日付に対する時間間隔から新しい日付を作成するためのメソッドを提供します。 NSDateオブジェクトをDateFormatterオブジェクトと組み合わせて使用すると、日付と時刻のローカライズされた表現を作成できます。また、NSCalendarオブジェクトと組み合わせてカレンダー演算を実行できます。
NSDateは、Core FoundationのCFDateとフリーダイヤルでつながっています。フリーダイヤルブリッジングの詳細については、フリーダイヤルブリッジングを参照してください。
_________重要__________________
FoundationフレームワークへのSwiftオーバーレイはDate構造体を提供します。これはNSDateクラスに橋渡しします。値型の詳細については、「CocoaとObjective-CでのSwiftの使用」の「Cocoaフレームワークの操作」(Swift 4.1)を参照してください。
__________|\|//|___________________
サブクラス化ノート
特定のカレンダシステムで作業しやすくするため、またはより細かい時間精度で日付と時刻の値で作業するために、NSDateをサブクラス化することができます。
上書きする方法およびその他の要件
プライベートまたはパブリックサブクラスによって提供されるものとは異なる動作を取得するためにNSDateをサブクラス化したい場合は、次の手順を実行する必要があります。
日付と時刻の値を保持するための適切なインスタンス変数を宣言します(絶対参照日に対して)。
インスタンス変数に基づいて正しい日付と時刻の値を指定するには、timeIntervalSinceReferenceDateインスタンスメソッドをオーバーライドします。
指定された初期化メソッドの1つであるinit(timeIntervalSinceReferenceDate :)をオーバーライドします。
カレンダーシステムを表すサブクラスを作成する場合は、過去と将来の期間をこのカレンダーの単位に分割するメソッドを定義します。
NSDateはこれらのプロトコルを採用しているため、NSCopyingおよびNSCodingプロトコルに必要なメソッドを実装する
特別な考慮事項
サブクラスは、NSDateで使用されている絶対参照日とは異なる参照日を使用することがあります(2001年1月1日の00:00:00 UTC)。 存在する場合でも、メソッドtimeIntervalSinceReferenceDateおよびinit(timeIntervalSinceReferenceDate :)の実装では絶対参照日を使用する必要があります。 つまり、これらのメソッドのタイトルで参照されている参照日が絶対参照日です。 これらのメソッドで絶対参照日付を使用しない場合、サブクラスのNSDateオブジェクトとプライベートサブクラスのNSDateオブジェクト間の比較は機能しません。
typealias Date.ReferenceType
An alias for this value type's equivalent reference type.
Initializers
init(from: Decoder)
Instance Methods インスタンスメソッド
func addTimeInterval(TimeInterval)
この日付に時間間隔を追加します。
Discussion : 警告! これは絶対値を調整するだけです。 時間、日、月などのカレンダーの概念を追加したい場合は、カレンダーを使用する必要があります。 これは、夏時間、日数の異なる月などの複雑さを考慮に入れます。
func addingTimeInterval(TimeInterval) -> Date
この日付に時間間隔を追加することによって新しい日付値を作成します。
Discussion : 警告! これは絶対値を調整するだけです。 時間、日、月などのカレンダーの概念を追加したい場合は、カレンダーを使用する必要があります。 これは、夏時間、日数の異なる月などの複雑さを考慮に入れます。
func encode(to: Encoder)
Operator Functions 演算子関数
static func ... (Date) -> PartialRangeFrom<Date>
下限から上方向に延びる部分的な範囲を返します。
Discussion : 比較可能プロトコルに準拠する任意のタイプの部分的な範囲を作成するには、後置範囲演算子(postfix ...)を使用してください。 この例では、5.0以上の任意の値を含むPartialRangeFrom インスタンスを作成します。
let atLeastFive = 5.0...
atLeastFive.contains(4.0) // false
atLeastFive.contains(5.0) // true
atLeastFive.contains(6.0) // true
コレクションのインデックスのこのような部分範囲インデックスを使用して、部分範囲の下限からコレクションの最後までの範囲を表すことができます。
let numbers = [10, 20, 30, 40, 50, 60, 70]
print(numbers[3...])
// Prints "[40, 50, 60, 70]"
static func ... (Date) -> PartialRangeThrough<Date>
上限を含む、上限を含む部分範囲を返します。
Comparableプロトコルに準拠した任意のタイプの部分的な範囲を作成するには、接頭部のクローズ範囲演算子(prefix ...)を使用します。 この例では、5.0以下の任意の値を含むPartialRangeThrough インスタンスを作成します。
let throughFive = ...5.0
throughFive.contains(4.0) // true
throughFive.contains(5.0) // true
throughFive.contains(6.0) // false
このタイプのコレクションのインデックスの部分範囲を使用して、コレクションの先頭から部分範囲の上限までの範囲を表すことができます。
let numbers = [10, 20, 30, 40, 50, 60, 70]
print(numbers[...3])
// Prints "[10, 20, 30, 40]"
static func ... (Date, Date) -> ClosedRange<Date>
両方の境界を含む閉じた範囲を返します。
Discussion : Comparableプロトコルに準拠する任意のタイプのクローズドレンジを作成するには、クローズドレンジ演算子(...)を使用してください。 この例では、“ a”から“ z”までのClosedRange を作成します。
let lowercase = "a"..."z"
print(lowercase.contains("z"))
// Prints "true"
static func ..< (Date) -> PartialRangeUpTo<Date>
上限を含まないが上限までの部分的な範囲を返します。
static func ..< (Date, Date) -> Range<Date>
下限を含むが上限を含まない、半開きの範囲を返します。
static func > (Date, Date) -> Bool
static func > (Date, Date) -> Bool