2011-06-29 45 views
0

我想获得时区,但不能。iphone如何获得时区?

我使用的NSLog是节目对我来说是show.time = 2011-06-29四点20分00秒+0000

这里是我的代码。

-(IBAction)Save:(id)sender{ 
    NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar]; 
    //[calendar setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]]; 
    // Get the current date 
    NSDate *pickerDate = [self.datePicker date]; 

    // Break the date up into components 
    NSDateComponents *dateComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) 
                fromDate:pickerDate]; 
    NSDateComponents *timeComponents = [calendar components:(NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) 
                fromDate:pickerDate]; 

    // Set up the fire time 
    NSDateComponents *dateComps = [[NSDateComponents alloc] init]; 
    [dateComps setDay:[dateComponents day]]; 
    [dateComps setMonth:[dateComponents month]]; 
    [dateComps setYear:[dateComponents year]]; 
    [dateComps setHour:[timeComponents hour]]; 
    // Notification will fire in one minute 
    [dateComps setMinute:[timeComponents minute]]; 
    [dateComps setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]]; 
    //[dateComps setSecond:[timeComponents second]]; 



    timedata = [calendar dateFromComponents:dateComps]; 
    [dateComps release]; 

    DataClass *obj=[DataClass getInstance]; 

    obj.showdate = timedata; 

    //NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    //[defaults setObject:timedata forKey:@"selectdate"]; 
    //NSLog(@"save time = %@",obj.showdate); 

    [self dismissModalViewControllerAnimated:YES]; 
} 
+0

目前尚不清楚你想要什么。你在哪里以及如何显示时间? –

+0

嗨,我想显示的时间是show.time = 2011-06-29 12:28:00 + 8000这样。 – ahyong87

+0

[隐藏NSString到NSDate在不同时区]的可能重复(http://stackoverflow.com/questions/910060/covert-nsstring-to-nsdate-in-a-different-timezone) –

回答

0

你设置时区为您NSDateComponents对象GMT:

[dateComps setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]]; 

因此,你的日期将被解释为GMT之中。如果您希望该设备在时区,使用systemTimeZone

[dateComps setTimeZone:[NSTimeZone systemTimeZone]]; 

在一般情况下,在the docs for timeZoneWithAbbreviation:指出,缩写可以是不明确的。如果您想以某种方式获取特定时区,无论设备的位置如何,您都可以使用timeZoneForSecondsFromGMT:

您还可以设置时区为您的应用程序,如果你想要,而不是创建日期相关的对象时,总是提到一个特定的时间段:

[NSTimeZone setDefaultTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:60*8]]; 
NSTimeZone * appTZ = [NSTimeZone defaultTimeZone];