현재 시간을 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.