从操场开始。我正在尝试创建一个简单的应用程序。
我创建了一个date对象,就像这样:
var date = NSDate()
我怎样才能得到当前的时间?在其他语言中,我可以这样做:
var hour = date.hour
但我找不到任何这样的属性/方法。我找到了一个方法,dateWithCalendarFormat。我应该用这个吗?如果是,怎么做?
从操场开始。我正在尝试创建一个简单的应用程序。
我创建了一个date对象,就像这样:
var date = NSDate()
我怎样才能得到当前的时间?在其他语言中,我可以这样做:
var hour = date.hour
但我找不到任何这样的属性/方法。我找到了一个方法,dateWithCalendarFormat。我应该用这个吗?如果是,怎么做?
当前回答
仅用于特定格式的日期
let dateFormatter1 = NSDateFormatter()
dateFormatter1.dateStyle = .MediumStyle
dateFormatter1.timeStyle = .NoStyle
dateFormatter1.dateFormat = "dd-MM-yyyy"
let date = dateFormatter1.stringFromDate(NSDate())
其他回答
斯威夫特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
}
}
使用Swift 4进行测试
获取当前日期和时间
您可以像这样简单地获取当前日期和时间:
let currentDateTime = Date()
但是,Date是一个64位浮点数,用于测量自2001年1月1日00:00:00 UTC的引用日期以来的秒数。我可以通过使用查看当前datetime的数字
Date().timeIntervalSinceReferenceDate
在撰写本文时,它返回497626515.185066,可能不是您要找的。继续阅读。
正在创建另一个日期和时间
方法1
如果您知道引用日期之前或之后的秒数,则可以使用它。
let someOtherDateTime = Date(timeIntervalSinceReferenceDate: -123456789.0) // Feb 2, 1997, 10:26 AM
方法2
当然,使用年、月、日和小时(而不是相对的秒)来创建日期会更容易。为此,您可以使用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)
但是请记住,这是针对英语的,区域设置为美国。对于其他语言和地区,格式看起来会有所不同。
进一步的研究
如何在Swift 3中使用日期和时间,第1部分:日期,日历和DateComponents 如何在Swift 3中使用日期和时间,第2部分:日期格式化器 如何在Swift 3中使用日期和时间,第3部分:日期算术
斯威夫特5
func printTimestamp() {
let timestamp = DateFormatter.localizedString(from: NSDate() as Date, dateStyle: .medium, timeStyle: .short)
print(timestamp)
}
和调用函数printTimestamp()
扩展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)
你可以使用Swift4或swif5如下所示:
let date = Date()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let current_date = dateFormatter.string(from: date)
print("current_date-->",current_date)
输出:
2020-03-02