【发布时间】:2014-06-10 09:39:19
【问题描述】:
我如何在 Swift 中获取一天中的时间。
我试过NSCalendar 和NSDateComponents,但恐怕我只是从Swift 开始。
【问题讨论】:
我如何在 Swift 中获取一天中的时间。
我试过NSCalendar 和NSDateComponents,但恐怕我只是从Swift 开始。
【问题讨论】:
Swift 5.0 / 4.0 / 3.0
let hour = Calendar.current.component(.hour, from: Date())
或者,如果您对 12 hour AM/PM 日期格式感兴趣,请使用 NSDateFormatter
let formatter = DateFormatter()
formatter.dateFormat = "hh a" // "a" prints "pm" or "am"
let hourString = formatter.string(from: Date()) // "12 AM"
如果你想要分钟,秒和其他,请执行以下操作
let date = Date() // save date, so all components use the same date
let calendar = Calendar.current // or e.g. Calendar(identifier: .persian)
let hour = calendar.component(.hour, from: date)
let minute = calendar.component(.minute, from: date)
let second = calendar.component(.second, from: date)
查看Apple docs上的可用组件:
.era, .year, .month, .day, .hour, .minute, .second,
.weekday, .weekdayOrdinal, .quarter, weekOfMonth, .weekOfYear,
.yearForWeekOfYear, .nanosecond, .calendar, .timezone
Swift 2.0
let hour = NSCalendar.currentCalendar().component(.Hour, fromDate: NSDate())
Swift 1.0
let hour = NSCalendar.currentCalendar().component(.CalendarUnitHour, fromDate: NSDate())
【讨论】:
let hour = NSCalendar.currentCalendar().component(.Hour, fromDate: NSDate())
斯威夫特 3:
let date = Date()// Aug 25, 2017, 11:55 AM
let calendar = Calendar.current
let hour = calendar.component(.hour, from: date) //11
let minute = calendar.component(.minute, from: date) //55
let sec = calendar.component(.second, from: date) //33
let weekDay = calendar.component(.weekday, from: date) //6 (Friday)
从下面的 API 中获取任何可用的组件
public enum Component {
case era
case year
case month
case day
case hour
case minute
case second
case weekday
case weekdayOrdinal
case quarter
case weekOfMonth
case weekOfYear
case yearForWeekOfYear
case nanosecond
case calendar
case timeZone
}
斯威夫特 2:
let currentHour = NSCalendar.currentCalendar().component(.Hour, fromDate: NSDate())
这就够了:
let currentDate = NSDate() // You can input the custom as well
let calendar = NSCalendar.currentCalendar()
let components = calendar.components(.CalendarUnitHour | .CalendarUnitMinute, fromDate: currentDate)
let currentHour = components.hour // You can play around with the ""components""
【讨论】:
Calendar.current而不是Swift 3中的Calendar.current()吗?
如果你想要字符串中的当前小时,这是我能想到的那样简短易读。
let formatter = NSDateFormatter()
formatter.dateFormat = "HH"
let timeString = formatter.stringFromDate(NSDate())
【讨论】:
苦苦挣扎了一段时间,终于找到了最简单的解决方案
let dateComponents = NSCalendar.currentCalendar().components(NSCalendarUnit.HourCalendarUnit, fromDate: NSDate())
let nHourOfDay = dateComponents.hour
【讨论】:
对于 Swift 2.0:
let hour = NSCalendar.currentCalendar().component(NSCalendarUnit.Hour, fromDate: NSDate())
【讨论】:
这是我如何做的参考示例 (DateUtils.swift) -
使用示例:
let today = DateUtils.getToday();
let hr = DateUtils.getHours(today);
let min = DateUtils.getMinutes(today);
... (etc.) ...
DateUtils.swift:
//Field wrapper routines
class func getToday() -> Date { return Date(); }
class func getHours(_ date : Date) -> Int { return Calendar.current.component(.hour, from: date); }
class func getMinutes(_ date : Date) -> Int { return Calendar.current.component(.minute, from: date); }
... (continued for all fields, see file) ...
【讨论】:
您可以像这样一步一步获取当前小时的整数值:
let currentHour = NSCalendar.currentCalendar().components(.Hour, fromDate: NSDate()).hour
【讨论】: