2015-04-30 31 views
0

在我的iPhone/iPad应用程序中,我显示了一个UIDatePicker时间。它将以这种格式显示时间,上午11:00。当用户点击时间行时,我们展开时间行来显示这个datePicker行。 我在字符串“开始”中有一个时间戳:“11:00”,// ISO-8601格式的日期时间 我需要在拾取器轮上显示它作为打开时的选定时间。为此,我首先使用https://stackoverflow.com/a/9040554/4082792在上午12点得到日期。然后,我将给定时间(11:00)转换为秒数,并将其添加到午夜时间以获取当前时间。这次是在本地时区(因为我在使用NSDateFormatter时指定了时区)。当我尝试将日期设置为UIDatePicker时,即使时间在NSDate变量中正确,它也会给我错误的时间。上午11点,当地时间是4点30分,它给了我6点40分。 所以,我有两个问题: 1)为什么轮子上的时间不对。 2)如何将NSDate从一个时区转换到另一个时区,我需要以本地时间格式显示它。本地化NSDate的NSDate和转换时区

段:

NSString *strDate = @"11:00"; 
     NSDate *date = [NSDate date]; 
     NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar]; 
     NSUInteger preservedComponents = (NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit); 
     date = [calendar dateFromComponents:[calendar components:preservedComponents fromDate:date]]; 


     ///Start time 
     NSString *startTime = @"11:00"; 
     NSArray *startTimeSeparatedByColon = [startTime componentsSeparatedByString:@":"]; /// From 22:10 to [22, 10]; 
     NSInteger hourPartOfStart = startTimeSeparatedByColon[0] ? [startTimeSeparatedByColon[0] integerValue] : 0; 
     NSInteger minutePartOfStart = startTimeSeparatedByColon[1] ? [startTimeSeparatedByColon[1] integerValue] : 0; 
     NSTimeInterval totalTime = (hourPartOfStart*60*60+minutePartOfStart*60); 

     NSDate *finalDate = [NSDate dateWithTimeInterval:totalTime sinceDate:date]; 

     NSDate *dt = [NSDate dateWithTimeInterval:[NSTimeZone localTimeZone].secondsFromGMT sinceDate:finalDate]; 
     self.datePicker.date = dt; 

回答

0

默认情况下,iOS的转换日期为设备的时区。 但是,如果你想日期转换到另一个时区,这里是该代码:

NSTimeZone *currentDateTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"EST"]; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setTimeZone:currentDateTimeZone]; 

你可以得到的日期从这个dateFormatter对象“EST”的时区。

0

转换“EDT”时区

NSString *format = @"EEEE dd-MMMM-yyyy HH:mm:ss z"; 
NSDateFormatter *date_EDTDateFormate = [[NSDateFormatter alloc] init]; 
date_EDTDateFormate setDateFormat:format]; 
date_EDTDateFormate setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"EDT"]]; 
NSString *stringEDT = [dateFormatter_EDT stringFromDate:date_System]; 
+0

这将返回的NSString不能作为的NSDate上的UIDatePicker。纠正我,如果我错了。 – iosCurator

+0

在您的选取器视图中只使用数据字符串。 –

+0

当你想使用日期然后转换字符串到日期。 –