¿Cómo obtengo el día de la semana con Cocoa Touch?

¿Cómo obtengo el día de la semana como una cadena en Objective-C?

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; [dateFormatter setDateFormat:@"EEEE"]; NSLog(@"%@", [dateFormatter stringFromDate:[NSDate date]]); 

muestra el día actual de la semana como una cadena en la configuración regional que depende de la configuración regional actual.

Para obtener solo un número de días de semana, debe usar la clase NSCalendar:

 NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease]; NSDateComponents *comps = [gregorian components:NSWeekdayCalendarUnit fromDate:[NSDate date]]; int weekday = [comps weekday]; 

Solo usa estas tres líneas:

 CFAbsoluteTime at = CFAbsoluteTimeGetCurrent(); CFTimeZoneRef tz = CFTimeZoneCopySystem(); SInt32 WeekdayNumber = CFAbsoluteTimeGetDayOfWeek(at, tz); 

Muchas de las respuestas aquí están en desuso. Esto funciona a partir de iOS 8.4 y le proporciona el día de la semana como una cadena y como un número.

 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); 
 -(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); } 

Así es como lo haces en Swift 3, y obtienes un nombre de día localizado …

 let dayNumber = Calendar.current.component(.weekday, from: Date()) // 1 - 7 let dayName = DateFormatter().weekdaySymbols[dayNumber - 1] 

Necesitaba un índice simple (gregoriano) del día de la semana, donde 0 = domingo y 6 = sábado para usar en algoritmos de coincidencia de patrones. A partir de ahí, es una simple cuestión de buscar el nombre del día de una matriz utilizando el índice. Esto es lo que se me ocurrió que no requiere formateadores de fecha, NSCalendar o manipulación de componentes de fecha:

 +(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; } 

Aquí está el código actualizado para Swift 3

Código:

 let calendar = Calendar(identifier: .gregorian) let weekdayAsInteger = calendar.component(.weekday, from: Date()) 

Para imprimir el nombre del evento como Cadena:

  let dateFromat = DateFormatter() datFormat.dateFormat = "EEEE" let name = datFormat.string(from: Date()) 

Creo que este tema es realmente útil, así que publico un código compatible 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) } } 

Donde sea que pueda llamar:

 let today = NSDate.getBeautyToday() print(today) ---> "Monday, 14 December" 

Swift 3.0

Como @ delta2flat sugirió, actualizo la respuesta dando al usuario la capacidad de especificar el formato personalizado.

 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 respuesta de Vladimir funcionó bien para mí, pero pensé que publicaría el enlace Unicode para las cadenas de formato de fecha.

http://www.unicode.org/reports/tr35/tr35-25.html#Date_Format_Patterns

Este enlace es para iOS 6. Las otras versiones de iOS tienen estándares diferentes que se pueden encontrar en la documentación de X-Code.

De esta manera funciona en Swift:

  let calendar = NSCalendar.currentCalendar() let weekday = calendar.component(.CalendarUnitWeekday, fromDate: NSDate()) 

Luego asigne los días de la semana a los números resultantes.

Tuve un problema bastante extraño con conseguir un día de la semana. Solo configurar el primer fin de semana no fue suficiente. También fue necesario establecer la zona horaria. Mi solución de trabajo fue:

  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: Obtén el día de la semana en una línea. ( basado en la respuesta de 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"; 

hay tres símbolos que podemos usar para formatear el día de la semana:

  • mi
  • mi
  • do

Los siguientes dos documentos pueden ayudarlo.

https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html

http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns

Manifestación:

puedes probar tu patrón en este sitio web:

http://nsdateformatter.com/