En mi aplicación, desea obtener el día (es decir,Sunday, Monday, etc.) a partir de la fecha.

Mi código es como sigue:

NSDate *currentDate = [NSDate date];
    NSCalendar *calendar = [NSCalendar currentCalendar];

    //ask for current week
    NSDateComponents *comps = [[NSDateComponents alloc] init];
    comps=[calendar components:NSWeekCalendarUnit|NSYearCalendarUnit fromDate:currentDate];
    //create date on week start
    NSDate* weekstart=[calendar dateFromComponents:comps];

    //add 7 days
    NSMutableArray* week=[NSMutableArray arrayWithCapacity:7];
    for (int i=1; i<=7; i++) {
        NSDateComponents *compsToAdd = [[NSDateComponents alloc] init];
        compsToAdd.day=i;
        NSDate *nextDate = [calendar dateByAddingComponents:compsToAdd toDate:weekstart options:0];
        NSLog(@"%@",nextDate);  //date is 2013-06-30 18:30:00 +0000



        NSDateFormatter *myFormatter = [[NSDateFormatter alloc] init];
        [myFormatter setDateFormat:@"EEEE"]; //day, like "Saturday"
        //[myFormatter setDateFormat:@"c"]; //day number, like 7 for saturday

        NSString *dayOfWeek = [myFormatter stringFromDate:nextDate];

PROBLEMA

        NSLog(@"Today is: %@", dayOfWeek);  //Prints Mondays instead of Sunday
    }

¿Cómo puedo solucionar esto?

InformationsquelleAutor user2526811 | 2013-07-01

7 Comentarios

  1. 6

    Intente esto :

        NSCalendar* calender = [NSCalendar currentCalendar];
        NSDateComponents* component = [calender components:NSWeekdayCalendarUnit fromDate:[NSDate date]];
        return [component weekday]; //1 for Sunday, 2 for Monday, and so on...

    y también ver este Nombre De Día De NSDate? y este https://discussions.apple.com/thread/1700102?start=0&tstart=0

    Editar

    probar este

    NSString * time = @"2013-06-30T11:00:26+0100";
    
    NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease];
    [df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"];
    NSDate *date1 = [df dateFromString:time];
    long lgTime = (long)[date1 timeIntervalSince1970];
    NSLog(@"%ld", lgTime);
    
    
    NSCalendar* calender = [NSCalendar currentCalendar];
    NSDateComponents* component = [calender components:NSWeekdayCalendarUnit fromDate:date1];
    
    NSLog(@"date=%@ === %@",[NSDate date],date1);
    NSLog(@"day= %d",[component weekday]); ///it return 1
    • Gracias por la respuesta.. pero devuelve 2 en lugar de 1
    • Fecha en la que pasó?
    • Como se puede ver en mi sue. he pasado a la fecha es 2013-06-30 18:30:00 +0000.
    • Como se puede ver en mi código. He pasado a la fecha es 2013-06-30 18:30:00 +00000.
    • ver editado mi respuesta va a trabajar..
    • Gracias por su respuesta. Pero aun así, se devuelve 2. Allí no ‘T», incluido en mi fecha.
    • es uno de los formato, intente manualmente si es de trabajo, a continuación, convertir la fecha en que formato.

  2. 6
     NSCalendar* calender = [NSCalendar currentCalendar];
    
     NSDateComponents* component = [calender components:NSWeekdayCalendarUnit fromDate:[NSDate date]];
    
    int weekDay = [component weekday];
    
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    NSString *weekdayString = [[formatter weekdaySymbols] objectAtIndex:weekDay - 1];
    
    NSLog(@"Day ::: %@", weekdayString);
  3. 5
    NSDateFormatter* theDateFormatter = [[NSDateFormatter alloc] init];
    [theDateFormatter setFormatterBehavior:NSDateFormatterBehavior10_4];
    [theDateFormatter setDateFormat:@"EEEE"];
    NSString *weekDay =  [theDateFormatter stringFromDate:[NSDate date]];
    • Gracias por la respuesta !! pero No funciona
  4. 1

    He hecho un pequeño NSDate categoría que le ayuda a encontrar el nombre de día de la semana de una fecha.
    Devuelve la cadena localizada para los nombres de los días de la semana.
    Tener una mirada en ella. Usted puede utilizar si lo desea.

    NKLocalizedWeekday+NSDate

    Básicamente, este es el código que usted necesita:

    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *components = [calendar components:NSWeekdayCalendarUnit fromDate:[NSDate date]];
    int weekdayNumber = [components weekday];
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    NSString *weekdayString = [[formatter weekdaySymbols] objectAtIndex:weekdayNumber - 1];
    • Gracias por la respuesta pero no funciona..
  5. 0
    mydate = [NSDate date];
    NSDateFormatter *dt2 = [ [NSDateFormatter alloc] init];
    [dt2 setDateFormat:@"EEEE"];
    
    NSString *day = [[NSString alloc] initWithFormat:@"%@",[dt2 stringFromDate:mydate]];
    • Gracias por tu respuesta.. Pero no funciona.
  6. 0

    se enfrentan a problemas debido a que se tome el tiempo local de la zona

    probar este

      NSDateFormatter *dateformate = [[NSDateFormatter alloc] init] ;
     [dateformate setTimeZone:[NSTimeZone timeZoneWithName:@"Australia/Sydney"]];
     [dateformate setDateFormat:@"EEEE"];
      NSLog(@"%@", [dateformate stringFromDate:[NSDate date]]);
      NSLog(@"%@", [NSTimeZone knownTimeZoneNames]);

    establecer la zona horaria que usted requiere.se puede trabajar y ayudar.

    problema similar en NSCalendar primer día de la semana enlace consultar.también te pueden ayudar.

    • Gracias por la respuesta.. pero no funciona…
  7. 0

    estoy usando este y trabajó para mí en iOS 8.4

    -(NSString *) extractDayFromDate {
         NSCalendar* calender = [NSCalendar currentCalendar];
         NSDateComponents* component = [calender components:NSCalendarUnitWeekday fromDate:[NSDate date]];
         return [[calender weekdaySymbols] objectAtIndex:([component weekday]-1)]; 
    }

Dejar respuesta

Please enter your comment!
Please enter your name here