【发布时间】:2015-04-30 10:34:32
【问题描述】:
在我的 iPhone / iPad 应用程序中,我正在显示一个 UIDatePicker 时间。它将以这种格式显示时间,上午 11:00。当用户单击时间行时,我们展开时间行以显示此 datePicker 行。 我在字符串“starts”中有一个时间戳:“11:00”,// ISO-8601 格式的时间 我需要在选择器轮上显示它作为打开时的选定时间。为此,首先我使用https://stackoverflow.com/a/9040554/4082792 获取上午12 点的日期。然后我将给定时间 (11:00) 转换为秒数并将其添加到午夜时间以获取当前时间。这次是本地时区(因为我在使用 NSDateFormatter 时指定了时区)。当我尝试使用此日期将日期设置为 UIDatePicker 时,它给了我不正确的时间,即使 NSDate 变量中的时间是正确的。对于上午 11:00,它给了我 6:40,而当地时间是 4:30。 所以,我有两个问题: 1)为什么车轮上的时间不对。 2) 如何将 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;
【问题讨论】:
标签: ios iphone nsdateformatter nstimezone