2013-06-13 26 views

risposta

34

È necessario raccogliere i componenti della data e modificare le proprietà richieste.

//gather current calendar 
NSCalendar *calendar = [NSCalendar currentCalendar]; 

//gather date components from date 
NSDateComponents *dateComponents = [calendar components:(NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond) fromDate:[NSDate date]]; 

//set date components 
[dateComponents setDay:17]; 
[dateComponents setMonth:5]; 
[dateComponents setYear:2013]; 

//save date relative from date 
NSDate *date = [calendar dateFromComponents:dateComponents]; 

O che, o si potrebbe aggiungere il numero di secondi in 1 giorno per incrementare il valore:

NSDate *date = [NSDate dateWithTimeInterval:((60 * 60) * 24) sinceDate:[NSDate date]]; 
+0

Aggiungendo il numero di secondi in 1 giorno presuppone che tutti giorni hanno la stessa quantità di secondi. Ma questo si romperà per un secondo bisestile: https: //en.wikipedia.org/wiki/Leap_second –

+0

NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit sono deprecati. Utilizzare: (NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond). – Niraj

0

È necessario trovare numberOfSeconds di oggi alle 0:00 e altro numero di dataOfSeconds alle 0 del mattino. Trova la differenza tra loro. Quindi per numberOfSeconds del 2013-05-17 15:00:12 +0000 aggiungi questa differenza.

0

Perché non è possibile modificare la data di inizio con la data e l'ora correnti desiderate utilizzando l'API dateWithString. In caso contrario, probabilmente è possibile esaminare dataByAddingTimeInterval API di NSDate anche tenendo conto dell'intervallo di tempo tra due NSDate

2

O in rapida:

let calendar = NSCalendar.currentCalendar() 
    let components = calendar.components([NSCalendarUnit.Year, NSCalendarUnit.Month, NSCalendarUnit.Day], fromDate: NSDate.init()) 
    components.day = 17 
    components.month = 5 
    components.year = 2013 

    let date = calendar.dateFromComponents(components) 
0

Swift 3.0
Get-Date con anno, mese & Giorno -5 dalla data corrente

//CurrentDate 
    let currentDate = Date() 

    let gregorianCalendar = Calendar(identifier: .gregorian) 
    var components = gregorianCalendar.dateComponents([.year, .month, .day], from: currentDate) 

    // Change int value which you want to minus from current Date. 
    components.day = components.day!-5 
    components.month = components.month!-5 
    components.year = components.year!-5 

    let date = gregorianCalendar.date(from: components)! 
    print("Current Date = \(currentDate)") 
    print("Old Date = \(date)") 

Swift 2,0

//CurrentDate 
    let currentDate = NSDate() 

    let gregorianCalendar = NSCalendar(identifier: .gregorian) 
    var components = gregorianCalendar.dateComponents([.year, .month, .day], from: currentDate) 

    // Change int value which you want to minus from current Date. 
    components.day = components.day!-5 
    components.month = components.month!-5 
    components.year = components.year!-5 

    let date = gregorianCalendar.date(from: components)! 
    print("Current Date = \(currentDate)") 
    print("Old Date = \(date)") 
2

Per saperne di più sul mio blog https://github.com/onmyway133/blog/issues/54

Oggi sto cercando di cambiare l'anno di un oggetto Date al 2000 a Swift.

let date = Date() 

In primo luogo, ho provato con date(bySetting:), ma non funziona con l'anno passato. Esso restituisce semplicemente nil

Calendar.current.date(bySetting: .year, value: 2000, of: date) 

In secondo luogo, ho provato con dateComponents. Il component.year è cambiato, ma il calendario restituisce ancora la data originale, molto strano !!. Non importa quale fuso orario e calendario che uso, ha ancora questo problema

var component = calendar.dateComponents(in: TimeZone.current, from: base) 
component.year = year 
Calendar.current.date(from: component) 

Infine, ho cercato di essere più esplicito, e funziona

var component = calendar.dateComponents([.year, .month, .day, .hour, .minute, .second], from: base) 
component.year = year 
Calendar.current.date(from: component) 
+0

Questo codice restituisce zero per me ogni volta –

+1

@WilliamT. Ciao, ho aggiornato la mia risposta, per favore guarda – onmyway133

4

Swift 3 & IOS 10.2

let calendar = Calendar.current 

    var dateComponents: DateComponents? = calendar.dateComponents([.hour, .minute, .second], from: Date()) 

    dateComponents?.day = 17 
    dateComponents?.month = 5 
    dateComponents?.year = 2013 

    let date: Date? = calendar.date(from: dateComponents!) 
    print(date!) 

Swift 3 & IOS 10,2

Problemi correlati