如何在Swift中更改当天的小时和分钟?

u84*_*six 32 nsdate swift

如果我创建一个Date()获取当前日期和时间,我想从中创建一个新日期,但是使用不同的小时,分​​钟和零秒,使用Swift最简单的方法是什么?我已经找到了很多'获得'而不是'设置'的例子.

Cod*_*ent 77

请注意,对于使用夏令时的区域设置,时钟更改日可能不存在几个小时,或者它们可能会出现两次.以下两种解决方案都返回Date?并使用强制展开.你应该nil在你的应用程序中处理.

Swift 3,4和iOS 8/OS X 10.9或更高版本

let date = Calendar.current.date(bySettingHour: 9, minute: 30, second: 0, of: Date())!
Run Code Online (Sandbox Code Playgroud)

斯威夫特2

使用NSDateComponents/ DateComponents:

let gregorian = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
let now = NSDate()
let components = gregorian.components([.Year, .Month, .Day, .Hour, .Minute, .Second], fromDate: now)

// Change the time to 9:30:00 in your locale
components.hour = 9
components.minute = 30
components.second = 0

let date = gregorian.dateFromComponents(components)!
Run Code Online (Sandbox Code Playgroud)

请注意,如果您致电print(date),则打印时间为UTC.这是在同一时刻,只是在与你不同的时区表达.使用a NSDateFormatter将其转换为您当地的时间.

  • @AsALI,你只需添加 12 小时即可: `let date = Calendar.current.date(byAdding: DateComponents(hour:12), to: Date())` (4认同)
  • @AhmetAkkökSwift 3示例也可以在Swift 4中使用 (2认同)

Ric*_*tes 26

swift 3日期延长与时区

extension Date {
    public func setTime(hour: Int, min: Int, sec: Int, timeZoneAbbrev: String = "UTC") -> Date? {
        let x: Set<Calendar.Component> = [.year, .month, .day, .hour, .minute, .second]
        let cal = Calendar.current
        var components = cal.dateComponents(x, from: self)

        components.timeZone = TimeZone(abbreviation: timeZoneAbbrev)
        components.hour = hour
        components.minute = min
        components.second = sec

        return cal.date(from: components)
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为你必须在组件中包含`.timeZone` (3认同)