IT story

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

hot-time 2020. 4. 12. 10:34
반응형

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


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

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

var date = NSDate()

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

var hour = date.hour

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


스위프트 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의 답변과 비교하여 문자열이 아닌이 번호로 숫자를 얻을 수 있습니다 ... 선택을 선택하십시오!


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

그러나이 지역은 미국으로 설정된 영어 용입니다. 다른 언어 및 지역의 경우 서식이 다르게 보입니다.

추가 연구


NSDateFormatter의 편리한 방법을 사용할 수도 있습니다.

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

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)


스위프트 2 답변 :

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

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


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

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


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

하루 중 시간 만 있으면

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

스위프트 3에서

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

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

날짜 포맷터 사용-스위프트 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 은 클래스 이름입니다.


나는 많은 답변이 있다는 것을 알고 있지만 내 것이 많은 사람들에게 더 편리하다고 생각합니다

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

당신은 이것을 시도 할 수 있습니다

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

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

특정 형식의 날짜 만

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

에 확장자를 만들어 Date다른 파일에서 쉽게 호출 할 수 있습니다. 다음은 계산 된 속성을 사용하는 날짜 확장의 예입니다.

"오늘 오후 4:55"로 인쇄됩니다.

extension Date {

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

        return formatter
    }
}

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)

Dateformatter에서 얻을 수 있습니다

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd/MM/yyyy"
let dateString = dateFormatter.string(from:Date())
print(dateString)

특정 방식으로 답변의 형식을 지정해야하는 경우이 방법을 쉽게 사용할 수 있습니다 (기본값 = "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") 

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

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!
}

다음은 현재 장치 위치 시간 (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()

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.

참고 URL : https://stackoverflow.com/questions/24070450/how-to-get-the-current-time-as-datetime

반응형