Frage

Nachdem ich versucht habe, an dem Code eines anderen und so vielen verschiedenen Iterationen zu arbeiten, kann ich nicht verstehen, was ich mit Daten in einem Kalendermonatsansicht falsch mache. Ich versuche, einen Kalender in Monat zu präsentieren. Zum Beispiel in Australien zeigt es den 17. März als Freitag. Jede Hilfe wird sehr geschätzt!

Hier ist das Code -Beispiel, das ich verwende:

-(void)setCalendar
{
    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *comps = [gregorian components:units fromDate:[NSDate date]];
    self.currentDate = [gregorian dateFromComponents:comps];
    NSInteger weekdayInteger=[comps weekday];
    currentMonth=[comps month]; 
    currentYear=[comps year];   
    NSString *dateString=[[NSString stringWithFormat:@"%@",currentDate] substringToIndex:10];
    NSArray *array= [dateString componentsSeparatedByString:@"-"];
    NSInteger currentDay=[[array objectAtIndex:2] intValue];
    currentMonthConstant=currentMonth;
    currentYearConstant=currentYear;
    currentDayConstant=currentDay;
    currentConstantDate=[NSString stringWithFormat:@"%d/%d/%d",currentDayConstant,currentMonthConstant,currentYearConstant];
    currentFirstDay=((8+weekdayInteger-(currentDay%7))%7);
    if(currentFirstDay==0)
        currentFirstDay=7;
    [gregorian release];
}

Und so bevölkern ich den Kalender:

-(void)fillCalender:(NSInteger)month weekStarts:(NSInteger)weekday year:(NSInteger)year
{

    currentMonth=month;
    currentYear=year;
    currentFirstDay=weekday;
    UIButton *temp;
    NSInteger numberOfDays=[self getNumberofDays:month YearVlue:year];
    currentLastDay=(currentFirstDay+numberOfDays-1)%7;
    if(currentLastDay==0)
        currentLastDay=7;
    NSString *monthName=[self getMonth:month];
    NSInteger grid=(weekday-1); 

    monthLabel.text=[NSString stringWithFormat:@"%@   %d",monthName,year];


    for(int i=1;i<=numberOfDays;i++)
    {
        if([frontView isEqualToString:@"view1"])
            temp=[arr_View2Buttons objectAtIndex:grid];
        else
            temp= [arr_View1Buttons objectAtIndex:grid];

        [temp setBackgroundImage:nil forState:UIControlStateNormal];

        [temp setUserInteractionEnabled:TRUE];
        UILabel *aLbl = (UILabel *)[temp viewWithTag:123];
        [aLbl setText:[NSString stringWithFormat:@"%d",i]];

        // check for today
        if(currentDayConstant == i && currentMonthConstant == currentMonth && currentYearConstant == currentYear)
        {
            [aLbl setTextColor:[UIColor blueColor]];
        }
        else
        {
            [aLbl setTextColor:[UIColor colorWithRed:69/255.0 green:2/255.0 blue:71/255.0 alpha:1.0]];
        }
        [temp setTag:i];

        grid++;
        if(grid==35)
            grid=0;
    }

}

Und schließlich anzeigenDidload:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self setCalendar];
    // set views
    [self.view1 setFrame:CGRectMake(0,45,320,232)];
    [self.view2 setFrame:CGRectMake(0,277,320,232)];
    [self.view addSubview:self.view1];
    [self.view addSubview:self.view2];
    frontView = @"view2";
    [self fillCalender:currentMonth weekStarts:currentFirstDay year:currentYear];
    frontView = @"view1";
}
War es hilfreich?

Lösung

Sie müssen den Code ändern

nScalendar ersetzen *Gregorian = [[NSCalendar alloc] initWithCalendaridentifier: NSregoriancalendar];

mit

NSCalendar *CurrentCalendar = [NSCalendar CurrentCalendar];

Dadurch wird der aktuelle Kalender vom Gerät aus identifiziert und entsprechend funktioniert

Hoffe das wird dein Problem lösen ...

Andere Tipps

Sie verwenden NSDateComponents, um den Wochentag, den Monat und das Jahr zu erhalten. Welches ist in Ordnung.
Aber dann verwenden Sie String Manipulation, um den Tag zu bekommen.
Und Sie manipulieren die Zeichenfolge, die Sie aus der Beschreibungsmethode von NSDate erhalten. Und aus meiner Erfahrung gibt diese Methode alles zurück, was sie will. Ich konnte nie herausfinden, welcher Zeitzone die Beschreibungsmethode verwendet, auf meiner Maschine gibt sie das NSDate in UTC -Zeitzone zurück. Andere Benutzer haben Fragen gestellt, sodass diese Methode das NSDate in der lokalen Zeitzone oder in einer Zeitzone zurückgibt, die ist Neben der örtlichen Zeitzone. Oder in einer willkürlichen Zeitzone. Normalerweise ist dies kein Problem, da Sie die Zeitzone -Informationen verwenden können, aber sie einfach ignorieren.

Um es kurz zu machen: Verwenden Sie keine String -Verarbeitung, wenn Sie die Datumsverarbeitung wünschen

IMHO Das ist ein Zeitzone -Problem. Weil Sie zwei verschiedene Arten der Datumsverarbeitung mischen und die Zeitzone ignorieren.
Befreien Sie sich den Teil der Streichmanipulation und verwenden Sie NSDateComponents für alles.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top