如何获取当前时间作为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 } }