놀이터에서 시작했습니다. 간단한 앱을 만들려고합니다.
다음과 같이 날짜 객체를 만들었습니다.
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()
그러나 Date
2001 년 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)"
}
추신-날짜 시간으로 현재 시간 (및 시간)을 가져 와서 질문의 의미를 정확히 알지 못하지만 위의 질문에 대답하기에 충분해야합니다.