在我的iPhone / iPad应用程序中,我正在显示UIDatePicker。它将以此格式显示时间,上午11:00。当用户点击时间行时,我们展开时间行以显示此datePicker行。 我有一个时间戳在字符串“开始”:“11:00”,// ISO-8601格式的时间 我需要在拣货轮上将其显示为打开时的选定时间。为此,首先我使用https://stackoverflow.com/a/9040554/4082792在上午12点获取日期。然后我将给定时间(11:00)转换为秒数并将其添加到午夜时间以获得当前时间。这个时间是在本地时区(因为我在使用NSDateFormatter时指定了时区)。当我尝试使用此日期将日期设置为UIDatePicker时,即使NSDate变量中的时间正确,它也会给我不正确的时间。上午11点,它给我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;
答案 0 :(得分:0)
默认情况下,iOS会将日期转换为设备的时区。 但是,如果您想将日期转换为另一个时区,请输入以下代码:
Skobbler
您可以在" EST"中获取日期来自此dateFormatter对象的时区。
答案 1 :(得分:0)
转换“EDT” TimeZone
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];