Risposte:
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"EEEE"];
NSLog(@"%@", [dateFormatter stringFromDate:[NSDate date]]);
restituisce il giorno della settimana corrente come stringa nelle impostazioni internazionali in base alle impostazioni internazionali correnti.
Per ottenere solo un numero di giorno della settimana è necessario utilizzare la classe NSCalendar:
NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDateComponents *comps = [gregorian components:NSWeekdayCalendarUnit fromDate:[NSDate date]];
int weekday = [comps weekday];
Usa queste tre righe:
CFAbsoluteTime at = CFAbsoluteTimeGetCurrent();
CFTimeZoneRef tz = CFTimeZoneCopySystem();
SInt32 WeekdayNumber = CFAbsoluteTimeGetDayOfWeek(at, tz);
Molte delle risposte qui sono deprecate. Funziona a partire da iOS 8.4 e ti dà il giorno della settimana come stringa e come numero.
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"EEEE"];
NSLog(@"The day of the week: %@", [dateFormatter stringFromDate:[NSDate date]]);
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDateComponents *comps = [gregorian components:NSCalendarUnitWeekday fromDate:[NSDate date]];
int weekday = [comps weekday];
NSLog(@"The week day number: %d", weekday);
weekday
componente di NSCalendar
è un NSInteger
, sarà necessario eseguire il cast [comps weekday]
su un int
, se necessario, altrimenti verrà visualizzato un avviso in merito.
Ecco come puoi farlo in Swift 3 e ottenere un nome del giorno localizzato ...
let dayNumber = Calendar.current.component(.weekday, from: Date()) // 1 - 7
let dayName = DateFormatter().weekdaySymbols[dayNumber - 1]
-(void)getdate {
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd"];
NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:@"MMM dd, yyyy HH:mm"];
NSDateFormatter *timeFormat = [[NSDateFormatter alloc] init];
[timeFormat setDateFormat:@"HH:mm:ss"];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init] ;
[dateFormatter setDateFormat:@"EEEE"];
NSDate *now = [[NSDate alloc] init];
NSString *dateString = [format stringFromDate:now];
NSString *theDate = [dateFormat stringFromDate:now];
NSString *theTime = [timeFormat stringFromDate:now];
NSString *week = [dateFormatter stringFromDate:now];
NSLog(@"\n"
"theDate: |%@| \n"
"theTime: |%@| \n"
"Now: |%@| \n"
"Week: |%@| \n"
, theDate, theTime,dateString,week);
}
Avevo bisogno di un semplice indice (gregoriano) del giorno della settimana, dove 0 = domenica e 6 = sabato da utilizzare negli algoritmi di corrispondenza del pattern. Da lì è semplice cercare il nome del giorno da un array usando l'indice. Ecco cosa mi è venuto in mente che non richiede formattatori di data o NSCalendar o manipolazione dei componenti della data:
+(long)dayOfWeek:(NSDate *)anyDate {
//calculate number of days since reference date jan 1, 01
NSTimeInterval utcoffset = [[NSTimeZone localTimeZone] secondsFromGMT];
NSTimeInterval interval = ([anyDate timeIntervalSinceReferenceDate]+utcoffset)/(60.0*60.0*24.0);
//mod 7 the number of days to identify day index
long dayix=((long)interval+8) % 7;
return dayix;
}
Ecco il codice aggiornato per Swift 3
Codice :
let calendar = Calendar(identifier: .gregorian)
let weekdayAsInteger = calendar.component(.weekday, from: Date())
Per stampare il nome dell'evento come stringa:
let dateFromat = DateFormatter()
datFormat.dateFormat = "EEEE"
let name = datFormat.string(from: Date())
Penso che questo argomento sia davvero utile, quindi inserisco del codice compatibile con Swift 2.1 .
extension NSDate {
static func getBeautyToday() -> String {
let now = NSDate()
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "EEEE',' dd MMMM"
return dateFormatter.stringFromDate(now)
}
}
Ovunque puoi chiamare:
let today = NSDate.getBeautyToday()
print(today) ---> "Monday, 14 December"
Swift 3.0
Come suggerito da @ delta2flat, aggiorno la risposta dando all'utente la possibilità di specificare un formato personalizzato.
extension NSDate {
static func getBeautyToday(format: String = "EEEE',' dd MMMM") -> String {
let now = Date()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = format
return dateFormatter.string(from: now)
}
}
La risposta di Vladimir ha funzionato bene per me, ma ho pensato di pubblicare il collegamento Unicode per le stringhe di formato della data.
http://www.unicode.org/reports/tr35/tr35-25.html#Date_Format_Patterns
Questo collegamento è per iOS 6. Le altre versioni di iOS hanno standard diversi che possono essere trovati nella documentazione X-Code.
In questo modo funziona in Swift:
let calendar = NSCalendar.currentCalendar()
let weekday = calendar.component(.CalendarUnitWeekday, fromDate: NSDate())
Quindi assegnare i giorni della settimana ai numeri risultanti.
Ho avuto un problema piuttosto strano nell'ottenere un giorno della settimana. Solo impostare firstWeekday non era sufficiente. Era inoltre necessario impostare il fuso orario. La mia soluzione di lavoro era:
NSCalendar* cal = [NSCalendar currentCalendar];
[cal setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
[cal setFirstWeekday:1]; //Sunday
NSDateComponents* comp = [cal components:( NSWeekOfMonthCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit | NSWeekCalendarUnit) fromDate:date];
return [comp weekday] ;
Swift 2: ottieni il giorno della settimana in una riga. ( basato sulla risposta di neoscribe )
let dayOfWeek = Int((myDate.timeIntervalSinceReferenceDate / (60.0*60.0*24.0)) % 7)
let isMonday = (dayOfWeek == 0)
let isSunday = (dayOfWeek == 6)
self.dateTimeFormatter = [[NSDateFormatter alloc] init];
self.dateTimeFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]; // your timezone
self.dateTimeFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"zh_CN"]; // your locale
self.dateTimeFormatter.dateFormat = @"ccc MM-dd mm:ss";
ci sono tre simboli che possiamo usare per formattare il giorno della settimana:
I seguenti due documenti possono aiutarti.
http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns
demo:
puoi testare il tuo modello su questo sito:
[dateFormatter weekdaySymbols]
(e simili), che restituisce un NSArray di NSStrings a partire da domenica all'indice 0.