LoginSignup

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 3 years have passed since last update.

【Swift】 Dateについて

Posted at

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
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up