현재 시간을 datetime으로 얻는 방법


263

놀이터에서 시작했습니다. 간단한 앱을 만들려고합니다.

다음과 같이 날짜 객체를 만들었습니다.

var date = NSDate()

현재 시간을 어떻게 알 수 있습니까? 다른 언어로 다음과 같이 할 수 있습니다.

var hour = date.hour

그러나 나는 그런 속성 / 방법을 찾을 수 없습니다. 방법을 찾았습니다 dateWithCalendarFormat. 사용해야합니까? 그렇다면 어떻게?

답변:


389

스위프트 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에서 시간과 분을 어떻게 얻습니까?

Nate의 답변과 비교하여 문자열이 아닌이 숫자로 숫자를 얻을 수 있습니다 ... 선택을 선택하십시오!


안녕하세요, 답변 주셔서 감사합니다. 예를 들어 분이 두 문자 미만인 경우 "04"와 같은 두 문자로 어떻게 반환 할 수
있습니까

2
@YestayMuratov이 편리한 웹 페이지는 Swift에서 NSDateFormatter를 사용하여 날짜를 포맷하는 모든 가능한 방법을 알려줍니다. :) codingexplorer.com/…
Max

15
새로운 Swift 버전 (2)와 비슷한 것을 사용해야하는 것으로 보입니다 let components = calendar.components(.NSCalendarUnit.Year.union(NSCalendarUnit.Minute), fromDate: date). 더 이상 수직 슬래시를 사용할 수 없습니다.
Hola Soy Edu Feliz Navidad 2016 년

5
let components = calendar.components(NSCalendarUnit.Year.union(NSCalendarUnit.Minute), fromDate: date)여분의 '.'를 제거했습니다. NSCalendarUnit 전
케이크 88

45
스위프트 2.1 : let components = calendar.components([ .Hour, .Minute, .Second], fromDate: date)
Obiwahn

184

스위프트 4 테스트

현재 날짜와 시간 얻기

다음과 같이 간단하게 현재 날짜와 시간을 얻을 수 있습니다.

let currentDateTime = Date()

그러나 Date2001 년 1 월 1 일 기준 날짜 00:00:00 UTC 이후의 시간 (초)을 측정하는 64 비트 부동 소수점 숫자 입니다. 사용하여 현재 날짜 시간의 해당 숫자를 볼 수 있습니다

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")

유니 코드 기술 표준은 다른 형식으로 보여줄 것을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
스위프트 3 : let timestamp = DateFormatter.localizedString (from : Date (), dateStyle : .short, timeStyle : .short)
Brian

51

Swift를 사용하면 확장 기능을 쉽게 만들고 사용할 수 있습니다. sharedCode.swift파일을 만들고 열거 형, 확장명 및 기타 재미있는 것들을 넣습니다. 나는 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)


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 년 5 월 1 일 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)"
}

추신-날짜 시간으로 현재 시간 (및 시간)을 가져 와서 질문의 의미를 정확히 알지 못하지만 위의 질문에 대답하기에 충분해야합니다.


위의 SaRaVaNaN DM의 답변에는 Calendar.current 끝에 추가 '()'가 있습니다.
Charlie Seligman

10

Swift 5를 사용하면 객체 Foundation에서 시간 값을 얻는 여러 가지 방법을 제공 Date합니다. 필요에 따라 다음 네 가지 놀이터 코드 스 니펫 중 하나를 선택할 수 있습니다 .


#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:)다음과 같은 선언이 있습니다.

날짜의 한 구성 요소에 대한 값을 리턴합니다.

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

#삼. DateFormatter dateFormat재산 사용

DateFormatter라는 속성이 dateFormat있습니다. dateFormat다음과 같은 선언이 있습니다.

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

스위프트 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 عبدالمؤمن 8

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)

출력은 다음과 같습니다

2019-12-20 09:40:08

3

Xcode 8.2.1 • 스위프트 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 일정 구성 요소 방법이 단일 구성 요소에 더 적합
Leo Dabus

@LeoDabus 옵션은 접근자가 전파되기 때문에 전파 DateComponents.year됩니다Int?
NoodleOfDeath

1
선택 사항이 아닌 달력 구성 요소 메소드를 사용할 수 있습니다. 랩 해제를 강제 할 수도 있습니다. 결코 실패하지 않을 것입니다. 그러나 나는 단일 요소 구성 요소 방법을 고수 할 것입니다
Leo

@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 2018

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

스위프트 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
        }
}

답을 설명하십시오.
MrMaavin

통합 Date void를 확장합니다 ... void Date의 시간 변수를 분 변수로 int 값에 넣은 다음 시간과 분을 int 값으로 반환합니다. 그런 다음 원하는 방식으로 코드에서 사용할 수 있습니다. 예를 들어 DateComponents ()-DateComponents.hour = Date.hour ()에서 해당 값을 호출하면 현재 시간의 int 값을 얻을 수 있습니다.
블라디미르 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.