如何使用 Swift 获取一天中的时间?
Posted
技术标签:
【中文标题】如何使用 Swift 获取一天中的时间?【英文标题】:How to get the hour of the day with Swift? 【发布时间】:2014-06-10 09:39:19 【问题描述】:我如何在 Swift 中获取一天中的时间。
我试过NSCalendar
和NSDateComponents
,但恐怕我只是从Swift 开始。
【问题讨论】:
【参考方案1】: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())
【讨论】:
使用 Swift 2:let hour = NSCalendar.currentCalendar().component(.Hour, fromDate: NSDate())
很高兴看到 Swift 是如何随着时间的推移而改进的。 Swift 3.0 版本比 Swift 1.0 更具可读性
如果你想要晚上 7 点而不是 07 点,你想使用“h a”而不是“hh a”【参考方案2】:
斯威夫特 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""
【讨论】:
谢谢,但恕我直言,这段代码太复杂了,因为我只想知道一天中的时间 对不起,没听懂。你是什么意思我只想得到一天中的时间?还有代码太复杂? @KumarKL 如何获得完整的一天,即周五、周六等? 最新版的swift就是让calendar = Calendar.current 这不是Calendar.current
而不是Swift 3
中的Calendar.current()
吗?【参考方案3】:
如果你想要字符串中的当前小时,这是我能想到的那样简短易读。
let formatter = NSDateFormatter()
formatter.dateFormat = "HH"
let timeString = formatter.stringFromDate(NSDate())
【讨论】:
我理解你的代码,但毕竟我需要一个整数而不是字符串,但是非常感谢你的帮助,我相信这段代码会很有用【参考方案4】:苦苦挣扎了一段时间,终于找到了最简单的解决方案
let dateComponents = NSCalendar.currentCalendar().components(NSCalendarUnit.HourCalendarUnit, fromDate: NSDate())
let nHourOfDay = dateComponents.hour
【讨论】:
你能删除“NSCalendarUnit”吗?我的 Mac 不在身边,无法对其进行测试。 @JeanLeMoignan 是的,你可以。我测试过了。【参考方案5】:对于 Swift 2.0:
let hour = NSCalendar.currentCalendar().component(NSCalendarUnit.Hour, fromDate: NSDate())
【讨论】:
【参考方案6】:这是我如何做的参考示例 (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) ...
【讨论】:
【参考方案7】:您可以像这样一步一步获取当前小时的整数值:
let currentHour = NSCalendar.currentCalendar().components(.Hour, fromDate: NSDate()).hour
【讨论】:
以上是关于如何使用 Swift 获取一天中的时间?的主要内容,如果未能解决你的问题,请参考以下文章
如何使数字显示为 hh:mm(持续时间,而不是一天中的时间)