nella mia applicazione iPhone Ho una data di inizio dell'evento, ad esempio: 2013-05-17 15:00:12 +0000. La mia domanda è: come posso cambiare il 2013-05-17 con la data odierna, ma lasciare il tempo uguale?Modifica anno, mese e giorno dell'oggetto NSDate
risposta
È 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]];
È 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.
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
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)
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)")
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)
Questo codice restituisce zero per me ogni volta –
@WilliamT. Ciao, ho aggiornato la mia risposta, per favore guarda – onmyway133
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
- 1. Genera NSDate da giorno, mese e anno
- 2. Formato data in giorno, mese giorno, anno
- 3. Angularjs successivo e precedente giorno, anno, mese
- 4. Ottieni mese per settimana, giorno e anno
- 5. Come determinare giorno, mese e anno int in iOS
- 6. Confronta mese mese e anno
- 7. Dato anno, mese e giorno, tutto in int, come dovrei generare un NSDate
- 8. Timestamp Python da giorno, mese, anno
- 9. NSDate - un anno fa, dilemma
- 10. Come ottenere giorno/mese e anno selezionati da jquery datepicker
- 11. Ordine in ordine decrescente - mese, giorno e anno
- 12. Creare un datetime in Rails utilizzando mese, giorno e anno
- 13. Mostra dati nel giorno, settimana, mese e anno corrente
- 14. Formattazione di un NSDate con nomi mese/giorno abbreviati
- 15. Ottieni dati della data (giorno, mese, anno) in GWT
- 16. NSDate sottrarre un mese
- 17. Crea data dai campi giorno, mese, anno in MySQL
- 18. Pandas mese groupby e anno
- 19. Come ottenere anno/mese/giorno da un oggetto data?
- 20. Get anno, mese o giorno dalle datetime64 NumPy
- 21. analizza una stringa a "anno-mese-giorno" formato in C#
- 22. PHP - Come arrivare anno, mese, giorno dalle stringa di tempo
- 23. gruppo per anno, mese, giorno in una sqlalchemy
- 24. Data oggetto con anno e mese solo
- 25. gruppi per mese e anno utilizzando mongoose.js
- 26. formattazione mese e anno con NSDateFormatter restituisce data non valida
- 27. Nome giorno da NSDate?
- 28. Panda: giorno modifica
- 29. DateTime.Now.ToShortDateString(); sostituire mese e giorno
- 30. Creare un nuovo NSDate combinando due NSDate
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 –
NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit sono deprecati. Utilizzare: (NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond). – Niraj