2010-12-07 4 views
0

Ich habe eine Schaltfläche, die die Stunde anzeigt - wenn die Ansicht geladen wird, wird sie auf die aktuelle Uhrzeit eingestellt. Dann, wenn ich die Date-Picker-Unteransicht laden, ist es immer auf 2 Stunden davor eingestellt. etwas in der Art: datum taste: 10:31 date picker: 12:31 nach dem ändern der stunde in der date picker zu: 13:31 die datum taste ändert sich zu: 11:31.Time-only UIDatePicker zeigt 2 Stunden vor der aktuellen Uhrzeit an

Code:

-(IBAction) timeClicked 
{ 
    [[NSBundle mainBundle] loadNibNamed:@"timePicker" owner:self options:nil]; 
    //timeView = [[UIView alloc]initWithNibName:@"timePicker" bundle:nil]; 
    [timeView setFrame:CGRectMake(0, 480, 320, 431)]; 
    NSLog(@"time clicked date: %@", select); 
    NSDate* sourceDate = [NSDate date]; 

    NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithName:@"Jerusalem"]; 
    NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone]; 

    NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate]; 
    NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate]; 
    NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset; 

    NSDate* destinationDate = [[[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate] autorelease]; 


    //[timePick setTime:destinationDate animated:YES]; 
    timePick.date=destinationDate; 
    NSLog(@"befoer delegate"); 
    //[timeView setDelegate:self]; 
    [self.view addSubview:timeView]; 
    CGRect frame = timeView.frame; 
    frame.origin.y = 110; 
    [UIView beginAnimations:nil context:NULL]; 
    timeView.frame = frame; 
    [UIView commitAnimations]; 
    NSLog(@"after"); 

} 


-(IBAction) done 
{ 
    select = [timePick date]; 
    [UIView beginAnimations:@"RemoveDatePicker" context:NULL]; 
    [UIView setAnimationDidStopSelector:@selector(transitionDidStop:finished:context:)]; 
    CGRect rect = timeView.frame; 
    rect.origin.y = 460; 
    timeView.frame = rect; 
    [UIView commitAnimations]; 

} 

- (void)transitionDidStop:(NSString *)animationID finished:(BOOL)finished context:(void *)context 
{ 
    if ([animationID isEqualToString:@"RemoveDatePicker"]){ 
     [timeView removeFromSuperview]; 
     NSLog(@"RemoveDatePicker"); 
    } 

} 


-(IBAction) timeChanged 
{ 
    select =[timePick date]; 

    [timeButton setTitle:[Path stringFromTime:select] forState:UIControlStateNormal]; 


    //[timeButton setTitle:@"time" forState:UIControlStateNormal]; 
} 

+(NSString *) stringFromTime: (NSDate *) date 
{ 

    NSString * stringDate = [date description]; 
    stringDate = [[stringDate substringFromIndex:11] substringToIndex:5]; 
    NSLog(@"[Path]stringTime: %@", stringDate); 
    return stringDate; 

} 

aus der Sicht tat Last:

NSDate* sourceDate = [NSDate date]; 

    NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithName:@"Jerusalem"]; 
    NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone]; 

    NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate]; 
    NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate]; 
    NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset; 

    NSDate* destinationDate = [[[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate] autorelease]; 

    timeModeChange.selectedSegmentIndex=1; 
    select=[[NSDate alloc]initWithDate:destinationDate ]; 
     NSLog(@"date %@", select); 
    [timeButton setTitle:[Path stringFromTime:select] forState:UIControlStateNormal]; 

Antwort

0

Gelöst. Das Problem war mit der StringFromTime - [Datumsbeschreibung] gibt den falschen Wert zurück.

0

Während ich nicht für das iPhone oder in Objective-C entwickelt haben, so bin ich nicht zu 100% auf die Syntax und so, aber es scheint mir, dass Sie zu einem Zeitpunkt Ihre Eingabezeit in GMT (oder UTC) übersetzen und auf der anderen Seite nicht. Dies könnte für die Diskrepanz von 2 Stunden verantwortlich sein, da die gewählte Zeitzone, die von Israel/Jerusalem, UTC + 2 (+3 IST) ist. Ich würde versuchen, die Zeit nicht zu "verschieben" und zu sehen, ob das hilft. Wenn ja, haben Sie zumindest das Problem gefunden, würde ich sagen.

+0

bevor wir die Zeitzone gewählt haben, war die Datumschaltfläche auf zwei Stunden früher als die tatsächliche Zeit eingestellt und die Datumsauswahl war auf die Echtzeit eingestellt, immer noch das gleiche Problem .. –