2010-12-07 53 views
0

J'ai un bouton qui affiche l'heure - lorsque la vue la charge à l'heure actuelle. Ensuite, lorsque je charge la sous-vue du sélecteur de date, elle est toujours réglée sur 2 heures d'avance. quelque chose comme ça: date bouton: 10:31 date picker: 12:31 après avoir changé l'heure dans le sélecteur de date à: 13:31 la date change pour être: 11:31.time-only UIDatePicker affiche 2 heures d'avance sur l'heure actuelle

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; 

} 

de la vue a fait la charge:

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]; 

Répondre

0

Résolu. Le problème était avec stringFromTime - [date discription] renvoie une valeur erronée.

0

Bien que je ne l'ai pas développé pour l'iPhone ou en Objective-C, donc je ne suis pas 100% sur la syntaxe et autres, mais il me semble que vous traduisez à un moment donné votre temps d'entrée à GMT (ou UTC) et à l'autre vous n'êtes pas. Cela pourrait expliquer l'écart de 2 heures puisque votre fuseau horaire choisi, celui d'Israël/Jérusalem, est UTC + 2 (+3 IST). J'essaierais de ne pas "bouger" le temps et de voir si cela aide. Si c'est le cas, alors vous avez au moins trouvé le problème, je dirais.

+0

avant que nous ayons choisi le fuseau horaire, le bouton de date a été réglé à deux heures plus tôt que le temps d'actuall et le sélecteur de date a été réglé sur le temps réel, toujours le même problème .. –