回答:
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から時間と分を取得するにはどうすればよいですか?
ネイトの答えと比較すると、文字列ではなく、これで数字が得られます...選択してください!
let components = calendar.components(.NSCalendarUnit.Year.union(NSCalendarUnit.Minute), fromDate: date)
では、に似たものを使用する必要があるようですが、ここでは垂直スラッシュはもう使用できません。
let components = calendar.components(NSCalendarUnit.Year.union(NSCalendarUnit.Minute), fromDate: date)
余分な「。」を削除しました NSCalendarUnitの前
let components = calendar.components([ .Hour, .Minute, .Second], fromDate: date)
Swift 4でテスト済み
次のように、現在の日付と時刻を簡単に取得できます。
let currentDateTime = Date()
ただし、Date
64ビットの浮動小数点数で、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)
ただし、これは地域が米国に設定されている英語用であることを覚えておいてください。他の言語や地域では、フォーマットが異なります。
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
ファイルを作成し、その中に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)
スウィフト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-May-01 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)"
}
PS-現在の時刻(および時間)を日付時刻として取得することで質問の正確な意味がわからないが、うまくいけば、上記は質問に答えるのに十分な説明になるはずです。
Swift 5ではFoundation
、Date
オブジェクトから時間の値を取得する多くの方法が提供されています。必要に応じて、次の4つのPlaygroundコードスニペットのいずれかを選択できます。
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)
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
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
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
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)
//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•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
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コンポーネントメソッドは単一コンポーネントに適しています
DateComponents.year
アクセサがあるInt?
component
、これらのアクセサーのメソッドを使用するように更新されました
特定の形式の日付のみ
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
}
}
特定の方法で回答をフォーマットする必要がある場合は、このメソッドを簡単に使用できます。デフォルトは「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")
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
}
}
現在のデバイスの場所の時刻(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
。