如何获取当前时间作为date时间

刚开始在操场上。 我正在尝试创build一个简单的应用程序。

我创build了一个这样的date对象:

var date = NSDate() 

我怎样才能获得当前的时间? 在其他语言中,我可以这样做:

 var hour = date.hour 

但是我找不到像这样的任何属性/方法。 我find了一个方法, dateWithCalendarFormat 。 我应该用那个吗? 如果是这样,怎么办?

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获得小时和分钟?

与Nate的答案相比,你会得到这个数字,而不是string…select你的select!

更新了Swift 3

获取当前date和时间

您可以简单地得到当前的date和时间:

 let currentDateTime = Date() 

但是, Date是一个64位浮点数,用于计算自2001年1月1日UTC时间00:00:00的参考date以来的秒数。 我可以看到使用当前date时间的数字

 Date().timeIntervalSinceReferenceDate 

在写这篇文章的时候,它返回了497626515.185066 ,可能不是你正在寻找的东西。 继续阅读。

创build另一个date和时间

方法1

如果您知道参考date之前或之后的秒数,则可以使用该秒数。

 let someOtherDateTime = Date(timeIntervalSinceReferenceDate: -123456789.0) // Feb 2, 1997, 10:26 AM 

方法2

当然,使用诸如年,月,日,小时(而不是相对秒)之类的东西来制作Date会更容易。 为此,您可以使用DateComponents指定组件,然后使用Calendar来创builddate。 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) 

其他时区的缩写可以在这里find。 如果你留下这个空白,那么默认是使用用户的时区。

方法3

最简洁的方式(但不一定是最好的)可以使用DateFormatter

 let formatter = DateFormatter() formatter.dateFormat = "yyyy/MM/dd HH:mm" let someDateTime = formatter.date(from: "2016/10/08 22:31") 

Unicode技术标准显示了DateFormatter支持的其他格式 。

显示date和时间

方法1

如果只想显示date或时间的某些组件,则可以使用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) 

请记住,这是英语与该地区设置为美国。 对于其他语言和地区的格式将看起来不同。

进一步研究

  • 如何在Swift 3中使用date和时间,第1部分:date,日历和DateComponents
  • 如何在Swift 3中使用date和时间,第2部分:DateFormatter
  • 如何在Swift 3中使用date和时间,第3部分:date算术

你也可以使用NSDateFormatter的方便方法,例如,

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

Swift使创build和使用扩展非常简单。 我创build一个sharedCode.swift文件,并把枚举,扩展和其他有趣的东西放在里面。 我创build了一个NSDate扩展来添加一些典型的function,这是艰苦和丑陋的一遍又一遍地键入:

 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)(当前短时间string= 11:51 AM)

Swift 2回答:

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

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

聚苯乙烯 – 不知道什么问题意味着通过获取当前时间(和小时)作为date时间,但希望上面应该足以解释回答这个问题。

如果你只是需要一天的时间

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

使用Swift 3和Swift 4, Foundation提供了很多方法来处理Date对象的小时值。 根据您的需要,您可以select以下四个Playground代码片段中的一个


#1。 使用Calendar dateComponents(_:from:)方法

Calendar有一个名为dateComponents(_:from:)dateComponents(_:from:)具有以下声明:

 func dateComponents(_ components: Set<Calendar.Component>, from date: Date) -> DateComponents 

使用日历时区返回date的所有date组件。

用法:

 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:)具有以下声明:

返回date的一个组件的值。

 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 

#3。 使用DateFormatter dateFormat属性

DateFormatter有一个名为dateFormat的属性。 dateFormat具有以下声明:

 var dateFormat: String! { get set } 

接收方使用的date格式string。

用法:

 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) 

使用接收者的指定区域设置来自模板的date格式。

用法:

 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) 

使用date格式化程序-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) 

更新date和时间每秒

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

注意:Timer代码中的DateAndTime是类名称。

你可以试试这个

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

现在调用该方法,并以小时,分钟和秒钟接收date

  let currentTime = self.getTime() print("Hour: \(currentTime.hour) Min: \(currentTime.min) Sec: \(currentTime.sec))") 

仅限特定格式的date

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

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 

你可以从Dateformatter中获得

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

你可以在Date上创build一个扩展,这样你可以很容易地在其他文件中调用它。 以下是使用计算属性的date扩展的示例。

它会打印出来:“今天4:55 PM”

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