現在時刻を日時として取得する方法


263

ちょうど遊び場から始めました。シンプルなアプリを作ろうとしています。

私はこのような日付オブジェクトを作成しました:

var date = NSDate()

現在の時間を取得するにはどうすればよいですか?他の言語では、次のようなことができます。

var hour = date.hour

しかし、私はそのようなプロパティ/メソッドを見つけることができません。メソッドを見つけましたdateWithCalendarFormat。それを使うべきですか?もしそうなら、どのように?

回答:


389

Swift 3の更新:

let date = Date()
let calendar = Calendar.current
let hour = calendar.component(.hour, from: date)
let minutes = calendar.component(.minute, from: date)

私はこれをします:

let date = NSDate()
let calendar = NSCalendar.currentCalendar()
let components = calendar.components(.CalendarUnitHour | .CalendarUnitMinute, fromDate: date)
let hour = components.hour
let minutes = components.minute

同じ質問をobjective-cで参照してくださいNSDateから時間と分を取得するにはどうすればよいですか?

ネイトの答えと比較すると、文字列ではなく、これで数字が得られます...選択してください!


こんにちは、回答に感謝します。たとえば、分が2文字未満の場合、「04」のような2文字でそれを返すにはどうすればよいですか
Yestay Muratov

2
@YestayMuratovこの便利なWebページは、スウィフトにNSDateFormatterを使用して日付をフォーマットするすべての可能な方法を持って伝えます:) codingexplorer.com/...
マックス

15
新しいSwiftバージョン(2)let components = calendar.components(.NSCalendarUnit.Year.union(NSCalendarUnit.Minute), fromDate: date)では、に似たものを使用する必要があるようですが、ここでは垂直スラッシュはもう使用できません。
Hola Soy Edu Feliz Navidad

5
let components = calendar.components(NSCalendarUnit.Year.union(NSCalendarUnit.Minute), fromDate: date)余分な「。」を削除しました NSCalendarUnitの前
cakes88

45
Swift 2.1: let components = calendar.components([ .Hour, .Minute, .Second], fromDate: date)
Obiwahn

184

Swift 4でテスト済み

現在の日付と時刻を取得する

次のように、現在の日付と時刻を簡単に取得できます。

let currentDateTime = Date()

ただし、Date64ビットの浮動小数点数で、2001年1月1日の基準日00:00:00 UTCからの秒数を測定します。次のコマンドを使用すると、現在の日時の数値を確認できます

Date().timeIntervalSinceReferenceDate

これを書いている時点では497626515.185066、おそらくあなたが探しているものとは正確に一致していません。読み続けます。

別の日付と時刻を作成する

方法1

基準日の前後の秒数がわかっている場合は、それを使用できます。

let someOtherDateTime = Date(timeIntervalSinceReferenceDate: -123456789.0) // Feb 2, 1997, 10:26 AM

方法2

もちろん、(相対的な秒ではなく)年、月、日、時間などを使用してを作成する方が簡単Dateです。これを使用DateComponentsして、コンポーネントを指定しCalendar、日付を作成できます。Calendar与えDateコンテキストを。それ以外の場合、どのタイムゾーンまたはカレンダーでそれを表現するかをどのようにして知るのでしょうか?

// Specify date components
var dateComponents = DateComponents()
dateComponents.year = 1980
dateComponents.month = 7
dateComponents.day = 11
dateComponents.timeZone = TimeZone(abbreviation: "JST") // Japan Standard Time
dateComponents.hour = 8
dateComponents.minute = 34

// Create date from components
let userCalendar = Calendar.current // user calendar
let someDateTime = userCalendar.date(from: dateComponents)

他のタイムゾーンの省略形はここにあります。空白のままにすると、デフォルトではユーザーのタイムゾーンが使用されます。

方法3

最も簡潔な方法(ただし、必ずしも最良とは限りません)は、を使用することDateFormatterです。

let formatter = DateFormatter()
formatter.dateFormat = "yyyy/MM/dd HH:mm"
let someDateTime = formatter.date(from: "2016/10/08 22:31")

Unicodeの技術基準は、他のフォーマットを示しているDateFormatterサポートします。

日付と時刻の表示

方法1

日付または時刻の特定のコンポーネントのみを表示する場合は、CalendarUnitから抽出するコンポーネントを指定するために使用できますDate

// get the current date and time
let currentDateTime = Date()

// get the user's calendar
let userCalendar = Calendar.current

// choose which date and time components are needed
let requestedComponents: Set<Calendar.Component> = [
    .year,
    .month,
    .day,
    .hour,
    .minute,
    .second
]

// get the components
let dateTimeComponents = userCalendar.dateComponents(requestedComponents, from: currentDateTime)

// now the components are available
dateTimeComponents.year   // 2016
dateTimeComponents.month  // 10
dateTimeComponents.day    // 8
dateTimeComponents.hour   // 22
dateTimeComponents.minute // 42
dateTimeComponents.second // 17

この回答もご覧ください。

方法2

方法1ではコンポーネントが提供されましたが、これらの数値をすべてのスタイル、言語、地域でフォーマットするのは大変な作業になります。そして、あなたはする必要はありません。これはDateFormatterクラスですでに行われています。

// get the current date and time
let currentDateTime = Date()

// initialize the date formatter and set the style
let formatter = DateFormatter()
formatter.timeStyle = .medium
formatter.dateStyle = .long

// get the date time String from the date object
formatter.string(from: currentDateTime) // October 8, 2016 at 10:48:53 PM

以下は、上記のコードの続きで、より多くのフォーマットオプションを示しています。

// "10/8/16, 10:52 PM"
formatter.timeStyle = .short
formatter.dateStyle = .short
formatter.string(from: currentDateTime)

// "Oct 8, 2016, 10:52:30 PM"
formatter.timeStyle = .medium
formatter.dateStyle = .medium
formatter.string(from: currentDateTime)

// "October 8, 2016 at 10:52:30 PM GMT+8"
formatter.timeStyle = .long
formatter.dateStyle = .long
formatter.string(from: currentDateTime)

// "October 8, 2016"
formatter.timeStyle = .none
formatter.dateStyle = .long
formatter.string(from: currentDateTime)

// "10:52:30 PM"
formatter.timeStyle = .medium
formatter.dateStyle = .none
formatter.string(from: currentDateTime)

ただし、これは地域が米国に設定されている英語用であることを覚えておいてください。他の言語や地域では、フォーマットが異なります。

さらなる研究


58

NSDateFormatterの便利なメソッドを使用することもできます。たとえば、

func printTimestamp() {
  let timestamp = NSDateFormatter.localizedStringFromDate(NSDate(), dateStyle: .MediumStyle, timeStyle: .ShortStyle)
  print(timestamp)
}
printTimestamp() // Prints "Sep 9, 2014, 4:30 AM"

2
NSDateFormatterの作成にはコストがかかります。作成して再利用する必要があります。
Rog

3
Swift 3:let timestamp = DateFormatter.localizedString(from:Date()、dateStyle:.short、timeStyle:.short)
Brian

51

Swiftを使用すると、拡張機能を簡単に作成して使用できます。私はsharedCode.swiftファイルを作成し、その中にenum、拡張子、その他の楽しいものを入れます。私は、NSDate何度も何度も入力するのが面倒で醜いいくつかの典型的な機能を追加する拡張機能を作成しました。

extension NSDate
{
    func hour() -> Int
    {
        //Get Hour
        let calendar = NSCalendar.currentCalendar()
        let components = calendar.components(.Hour, fromDate: self)
        let hour = components.hour

        //Return Hour
        return hour
    }


    func minute() -> Int
    {
        //Get Minute
        let calendar = NSCalendar.currentCalendar()
        let components = calendar.components(.Minute, fromDate: self)
        let minute = components.minute

        //Return Minute
        return minute
    }

    func toShortTimeString() -> String
    {
        //Get Short Time String
        let formatter = NSDateFormatter()
        formatter.timeStyle = .ShortStyle
        let timeString = formatter.stringFromDate(self)

        //Return Short Time String
        return timeString
    }
}

この拡張機能を使用すると、次のようなことができます。

        //Get Current Date
        let currentDate = NSDate()

        //Test Extensions in Log
        NSLog("(Current Hour = \(currentDate.hour())) (Current Minute = \(currentDate.minute())) (Current Short Time String = \(currentDate.toShortTimeString()))")

午前11時51分の場合は次のようになります。

(現在の時間= 11)(現在の分= 51)(現在の短い時間の文字列= 11:51 AM)


26

スウィフト2の答え:

 let date = NSDate()
 let calendar = NSCalendar.currentCalendar()
 let components = calendar.components([.Hour, .Minute], fromDate: date)
 let hour = components.hour
 let minutes = components.minute

23

スウィフト4

let dateFormatter : DateFormatter = DateFormatter()
//  dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
dateFormatter.dateFormat = "yyyy-MMM-dd HH:mm:ss"
let date = Date()
let dateString = dateFormatter.string(from: date)
let interval = date.timeIntervalSince1970

出力

2018-May-01 10:41:31


1
間隔は使用されません。
Nerdy Bunz

11

スウィフト3:

static func currentTime() -> String {
    let date = Date()
    let calendar = Calendar.current
    let hour = calendar.component(.hour, from: date)
    let minutes = calendar.component(.minute, from: date)
    return "\(hour):\(minutes)"
}

PS-現在の時刻(および時間)を日付時刻として取得することで質問の正確な意味がわからないが、うまくいけば、上記は質問に答えるのに十分な説明になるはずです。


上記のSaRaVaNaN DMの回答では、Calendar.currentの最後に余分な「()」がありました。
チャーリーセリグマン

10

Swift 5ではFoundationDateオブジェクトから時間の値を取得する多くの方法が提供されています。必要に応じて、4つのPlaygroundコードスニペットのいずれかを選択できます。


#1。Calendar dateComponents(_:from:)メソッドの使用

CalendarというメソッドがありdateComponents(_:from:)ます。dateComponents(_:from:)次の宣言があります:

func dateComponents(_ components: Set<Calendar.Component>, from date: Date) -> DateComponents

カレンダーのタイムゾーンを使用して、日付のすべての日付コンポーネントを返します。

使用法:

import Foundation

let date = Date()
let dateComponents = Calendar.current.dateComponents([.hour], from: date)
let hour = dateComponents.hour
print(String(describing: hour)) // may print: Optional(13)

#2。Calendar component(_:from:)メソッドの使用

Calendarというメソッドがありcomponent(_:from:)ます。component(_:from:)次の宣言があります:

日付の1つのコンポーネントの値を返します。

func component(_ component: Calendar.Component, from date: Date) -> Int

使用法:

import Foundation

let date = Date()
let hour = Calendar.current.component(.hour, from: date)
print(hour) // may print: 13

#3。DateFormatter dateFormatプロパティの使用

DateFormatterというプロパティがありますdateFormatdateFormat次の宣言があります:

var dateFormat: String! { get set }

受信者が使用する日付フォーマット文字列。

使用法:

import Foundation

let date = Date()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH"
let hour = dateFormatter.string(from: date)
print(hour) // may print: 13

#4。Dateformatter setLocalizedDateFormatFromTemplate(_:)メソッドの使用

DateformatterというメソッドがありsetLocalizedDateFormatFromTemplate(_:)ます。setLocalizedDateFormatFromTemplate(_:)次の宣言があります:

func setLocalizedDateFormatFromTemplate(_ dateFormatTemplate: String)

レシーバーの指定されたロケールを使用して、テンプレートから日付形式を設定します。

使用法:

import Foundation

let date = Date()
let dateFormatter = DateFormatter()
dateFormatter.setLocalizedDateFormatFromTemplate("HH")
let hour = dateFormatter.string(from: date)
print(hour) // may print: 13

7

一日の時間だけが必要な場合

let calendar = NSCalendar.currentCalendar()
var hour = calendar.component(.Hour,fromDate: NSDate())

6

Swift 3では

    let date = Date()
    let calendar = Calendar.current()

    let hour = calendar.component(.hour, from: date)

let calendar = Calendar.current; let unitFlags: Set<Calendar.Component> = Set<Calendar.Component ([.hour]); let components = calendar.dateComponents(unitFlags, from: self)
AbdulMomenعبدالمؤمن2016年

6

日付フォーマッターの使用-Swift 3.0

//Date
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
let dateString = "Current date is: \(dateFormatter.string(from: Date() as Date))"
labelfordate.text = String(dateString)


//Time    
let timeFormatter = DateFormatter()
timeFormatter.timeStyle = .medium
let timeString = "Current time is: \(timeFormatter.string(from: Date() as Date))"
labelfortime.text = String(timeString)

毎秒更新日時

override func viewDidLoad() {
super.viewDidLoad()

timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(DateAndTime.action), userInfo: nil, repeats: true)

       }

func action()
    {
    //Date
    let dateFormatter = DateFormatter()
    dateFormatter.dateStyle = .medium
    let dateString = "Current date is: \(dateFormatter.string(from: Date() as Date))"
    labelfordate.text = String(dateString)


    //Time
    let timeFormatter = DateFormatter()
    timeFormatter.timeStyle = .medium
    let timeString = "Current time is: \(timeFormatter.string(from: Date() as Date))"
    labelfortime.text = String(timeString)

    }

注:タイマーコードのDateAndTimeはクラス名です。


5

答えはたくさんありますが、多くの人にとって私の方が便利かもしれません。

extension String {
    init(epoch: Double) {
        let date = Date(timeIntervalSince1970: epoch)

        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "dd/MM/yyyy HH:mm:ssZZZ"

        self = dateFormatter.string(from: date)
    }
}

4

あなたはこれを試すことができます

func getTime() -> (hour:Int, min:Int, sec:Int) {
        let currentDateTime = NSDate()
        let calendar = NSCalendar.currentCalendar()
        let components = calendar.components([.Hour,.Minute,.Second], fromDate: currentDateTime)
        let hour = components.hour
        let min = components.minute
        let sec = components.second
        return (hour,min,sec)
    }

次に、そのメソッドを呼び出して、時、分、秒の日付を受け取ります

    let currentTime = self.getTime()
    print("Hour: \(currentTime.hour) Min: \(currentTime.min) Sec: \(currentTime.sec))")

4

ベローズのように素早く4または5で使用できます

let date = Date()
let df = DateFormatter()
df.dateFormat = "yyyy-MM-dd HH:mm:ss"
let dateString = df.string(from: date)

Ouputは次のようになります

2019-12-20 09:40:08

3

Xcode 8.2.1•Swift 3.0.2

extension Date {
    var hour: Int { return Calendar.autoupdatingCurrent.component(.hour, from: self) }
}

let date = Date()      // "Mar 16, 2017, 3:43 PM"
let hour = date.hour   // 15

または単にDate().hour
NoodleOfDeath

1
@NoodleOfDeath確かに。それは、日付への参照が必要かどうかによって異なります。
Leo Dabus

非常に真実であり、あらゆる目的のために、関連する日付コンポーネントを生成するときは、日付コンポーネントごとに新しく生成されたものではなく、同じ日付変数を使用することをお勧めします
NoodleOfDeath

3

noiivの簡潔で簡潔なソリューションを拡張して、より簡潔なSwift 3/4実装を次に示します。

スイフト3/4

let components = Calendar.current.dateComponents([.hour, .minute], from: Date())
let (hour, minute) = (components.hour, components.minute)

また、Leo Dabusの拡張拡張すると、次のようになります。

extension Date {

    func components(_ components: Set<Calendar.Component>) -> DateComponents {
        return Calendar.current.dateComponents(components, from: self)
    }

    func component(_ component: Calendar.Component) -> Int {
        return Calendar.current.component(component, from: self)
    }

    var era: Int { return component(.era) }
    var year: Int { return component(.year) }
    var month: Int { return component(.month) }
    var day: Int { return component(.day) }
    var hour: Int { return component(.hour) }
    var minute: Int { return component(.minute) }
    var second: Int { return component(.second) }
    var weekday: Int { return component(.weekday) }
    var weekdayOrdinal: Int { return component(.weekdayOrdinal) }
    var quarter: Int { return component(.quarter) }
    var weekOfMonth: Int { return component(.weekOfMonth) }
    var weekOfYear: Int { return component(.weekOfYear) }
    var yearForWeekOfYear: Int { return component(.yearForWeekOfYear) }
    var nanosecond: Int { return component(.nanosecond) }
    var calendar: Calendar? { return components([.calendar]).calendar }
    var timeZone: TimeZone? { return components([.timeZone]).timeZone }

}

そしてそれを次のように使用します:

let date = Date()
let (hour, minute) = (date.hour, date.minute)

Dateオブジェクトから年、月、日などを取得するときにオプションを返す必要はありません。Btw Calendarコンポーネントメソッドは単一コンポーネントに適しています
Leo Dabus

ため@LeoDabusオプションをpropogatedれるDateComponents.yearアクセサがあるInt?
NoodleOfDeath

1
オプション以外を返すCalendarコンポーネントメソッドを使用できます。強制的にアンラップすることもできます。それは決して失敗しません。しかし、私は単一要素コンポーネント法にこだわります
Leo Dabus

@LeoDabusはcomponent、これらのアクセサーのメソッドを使用するように更新されました
NoodleOfDeath

2

特定の形式の日付のみ

    let dateFormatter1 = NSDateFormatter()
    dateFormatter1.dateStyle = .MediumStyle
    dateFormatter1.timeStyle = .NoStyle
    dateFormatter1.dateFormat = "dd-MM-yyyy"
    let date = dateFormatter1.stringFromDate(NSDate())

1
NSDateFormatterを使用する場合、これらは作成にコストがかかるオブジェクトであるため、テーブルやコレクションなどでこのコードを使用している場合は、レイジーゲッターを使用して同じNSDateFormatterを再利用することができます。スタイルとフォーマットは、パフォーマンスに影響を与えることなく、必要な場所で再作成するのと同じくらい簡単に変更できます。乾杯。!
jcpennypincher 2017年

2

スウィフト5

func printTimestamp() {
    let timestamp = DateFormatter.localizedString(from: NSDate() as Date, dateStyle: .medium, timeStyle: .short)
    print(timestamp)
}

および関数printTimestamp()を呼び出します


1

で拡張子を作成Dateできます。これにより、他のファイルで簡単に呼び出すことができます。以下は、計算されたプロパティを使用する日付拡張の例です。

印刷されます:「今日、午後4時55分」

extension Date {

    var formatter: DateFormatter? {
        let formatter = DateFormatter()
        formatter.dateStyle = .short
        formatter.timeStyle = .short
        formatter.doesRelativeDateFormatting = true

        return formatter
    }
}

1

次のようにSwift4またはSwift 5を使用できます。

let date = Date()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let current_date = dateFormatter.string(from: date)
print("current_date-->",current_date)

次のような出力:

2020-03-02

0

特定の方法で回答をフォーマットする必要がある場合は、このメソッドを簡単に使用できます。デフォルトは「dd-MM-yyyy」です。

extension Date {

   func today(format : String = "dd-MM-yyyy") -> String{
      let date = Date()
      let formatter = DateFormatter()
      formatter.dateFormat = format
      return formatter.string(from: date)
   }
}

今日の日付を取得することは今使用して行うことができます

Date().today() or Date().today("dd/MM/yyyy") 

0

SWIFT 4:

extension Date
{
    func hour() -> Int
    {
    //Get Hour
    let calendar = Calendar.current
    let components = calendar.component(.hour, from: self)
    let hour = components

    //Return Hour
    return hour
    }


    func minute() -> Int
    {
    //Get Minute
    let calendar = Calendar.current
    let components = calendar.component(.minute, from: self)
    let minute = components

    //Return Minute
    return minute
        }
}

あなたの答えを説明してください。
マービン氏

それは、統合されたDate voidを拡張します... void日付の時変数をint値に配置し、分変数も同様にして、時と分をint値として返します。その後、コード内で自由に使用できます。たとえば、DateComponents()からその値を呼び出すことができます-DateComponents.hour = Date.hour()-現在の時刻のint値を提供します。
Vladimir Sukanica、

0
func getCurrentDate() -> Date {
    let date = Date()
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd"
    let dateInString  = dateFormatter.string(from: date)
    let dateinDate = dateFormatter.date(from: dateInString)
    return dateinDate!
}

0

現在のデバイスの場所の時刻(GMT)を取得するSWIFT拡張機能を次に示します。

func getGMTTimeDate() -> Date {
   var comp: DateComponents = Calendar.current.dateComponents([.year, .month, .day, .hour, .minute], from: self)
   comp.calendar = Calendar.current
   comp.timeZone = TimeZone(abbreviation: "GMT")!
   return Calendar.current.date(from: comp)!
}

今すぐ入手:-

Date().getGMTTimeDate()

0

Swift 5(Xcode 10&Xcode 11)で動作します(フランスUTCから)

func getCurrentDateTime() {
    let now = Date()
    let formatter = DateFormatter()
    formatter.locale = Locale(identifier: "fr_FR")
    formatter.dateFormat = "EEEE dd MMMM YYYY HH:mm"
    myLabel.text = formatter.string(from: now)
    myLabel.font = UIFont(name: "HelveticaNeue-Light", size: 12)
    myLabel.textColor = UIColor.black
}

日付のみを表示したい場合は、 formatter.dateFormat

formatter.dateFormat = "EEEE dd MMMM YYYY"

時間のみを表示するには、次のように変更formatter.dateFormatします

formatter.dateFormat = "HH:mm"

追加することgetCurrentDateTime()を忘れないでくださいviewDidLoad


-1

あなたはDateformatterから得ることができます

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd/MM/yyyy"
let dateString = dateFormatter.string(from:Date())
print(dateString)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.