Подтвердить что ты не робот

Как изменить текущие часы дня и минуты в Swift?

Если я создаю Date(), чтобы получить текущую дату и время, я хочу создать новую дату из этого, но с разными часами, минутами и нулевыми секундами, что самый простой способ сделать это с помощью Swift? Я нашел так много примеров с "получением", но не "настройкой".

4b9b3361

Ответ 1

Помните, что в регионах, где используется летнее время, некоторые часы могут не существовать в дни смены часов или они могут встречаться дважды. Оба решения ниже возвращают Date? и использовать распаковку силой. Вы должны обработать возможный nil в вашем приложении.

Swift 3, 4 и iOS 8/OS X 10.9 или более поздняя версия

let date = Calendar.current.date(bySettingHour: 9, minute: 30, second: 0, of: Date())!

Swift 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)!

Обратите внимание, что если вы вызываете print(date), время печати указано в формате UTC. Это тот же момент времени, просто выраженный в другом часовом поясе от вашего. Используйте NSDateFormatter чтобы преобразовать его в ваше местное время.

Ответ 2

быстрое расширение даты 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)
    }
}