刚开始操场.我正在尝试创建一个简单的应用程序.
我已经创建了一个这样的日期对象:
var date = NSDate()
我怎样才能获得当前时间?在其他语言中,我可以这样做:
var hour = date.hour
但我找不到任何类似的属性/方法.我找到了一种方法dateWithCalendarFormat
.我应该用吗?如果是这样,怎么样?
斯威夫特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
OUTPUT
2018年5月1日10:41:31
斯威夫特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使得创建和使用扩展变得非常容易.我创建了一个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 AM)
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的答案相比,你会得到这个数字,而不是字符串...选择你的选择!
如果你只需要一天的时间
let calendar = NSCalendar.currentCalendar() var hour = calendar.component(.Hour,fromDate: NSDate())
//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) }
注意:Timer代码中的DateAndTime是类名.
使用Swift 3和Swift 4,Foundation
可以通过多种方式获取Date
对象的小时值.根据您的需要,您可以选择以下四个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:)
有以下声明:
返回日期的一个组件的值.
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
我知道有很多答案,但我认为对我们来说可能更方便
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) } }
在Swift 3中,
let date = Date() let calendar = Calendar.current() let hour = calendar.component(.hour, from: date)
斯威夫特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 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")
在统一的技术标准表明其他格式是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)
但请记住,这是针对美国的英语区域.对于其他语言和区域,格式将看起来不同.
如何使用Swift 3中的日期和时间,第1部分:日期,日历和DateComponents
如何在Swift 3中使用日期和时间,第2部分:DateFormatter
如何在Swift 3中使用日期和时间,第3部分:日期算术
您也可以使用NSDateFormatter的便捷方法,例如,
func printTimestamp() { let timestamp = NSDateFormatter.localizedStringFromDate(NSDate(), dateStyle: .MediumStyle, timeStyle: .ShortStyle) print(timestamp) } printTimestamp() // Prints "Sep 9, 2014, 4:30 AM"