在我的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;
这将返回的NSString不能作为的NSDate上的UIDatePicker。纠正我,如果我错了。 – iosCurator
在您的选取器视图中只使用数据字符串。 –
当你想使用日期然后转换字符串到日期。 –