如何使用 Swift 获取一天中的时间?

Posted

技术标签:

【中文标题】如何使用 Swift 获取一天中的时间?【英文标题】:How to get the hour of the day with Swift? 【发布时间】:2014-06-10 09:39:19 【问题描述】:

我如何在 Swift 中获取一天中的时间。 我试过NSCalendarNSDateComponents,但恐怕我只是从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 获取一天中的时间?的主要内容,如果未能解决你的问题,请参考以下文章

让 Python 打印一天中的时间

如何仅在一天中的特定时间运行 Python 脚本?

如何使数字显示为 hh:mm(持续时间,而不是一天中的时间)

获取“一天中的第几周”?

使用当前文化定义的 12 或 24 小时格式从 DateTime 获取一天中的小时

如何更改 seaborn 直方图以在一天中的几个小时内工作?