2016-03-17 11 views
7

Jeśli utworzę numer Date(), aby uzyskać aktualną datę i godzinę, chcę utworzyć nową datę, ale z inną godziną, minutą i zerową sekundą, jaki jest najłatwiejszy sposób na zrobienie tego za pomocą Swift? Znalazłem tak wiele przykładów z "dostaniem", ale nie "ustawieniem".Jak zmienić godziny i minuty bieżącego dnia w Swift?

+0

Gdyby spróbować go z 'NSDateFormatter'? i użyj 'dateFromString' z niego – Lee

+0

https://gist.github.com/anishparajuli555/ee678fe3e3be39a31aba ten punkt może ci pomóc –

+0

Myślę, że ta odpowiedź jest lepsza niż konwersja na ciąg iz powrotem. Właśnie dlatego zapytałem "najprostszy sposób" w moim pytaniu. Wiem, że jest kilka sposobów na zrobienie tego, ale myślę, że używanie komponentów jest najlepsze. – u84six

Odpowiedz

29

Zastosowanie NSDateComponents:

Swift 3:

let gregorian = Calendar(identifier: .gregorian) 
let now = Date() 
var components = gregorian.dateComponents([.year, .month, .day, .hour, .minute, .second], from: now) 

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

let date = gregorian.date(from: components)! 

Swift 2:

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

Zauważ, że jeśli zadzwonisz print(date) czas drukowany jest w UTC. Jest to ten sam moment w czasie, wyrażony w innej strefie czasowej niż Twoja. Użyj NSDateFormatter, aby przekonwertować go na czas lokalny.

13

Swift 3 data przedłużenia ze strefy czasowej

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) 
    } 
} 
+1

Myślę, że musisz uwzględnić '.timeZone' w komponentach – Daniel

Powiązane problemy