Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 设置UIDateTime选择器时区_Ios_Objective C - Fatal编程技术网

Ios 设置UIDateTime选择器时区

Ios 设置UIDateTime选择器时区,ios,objective-c,Ios,Objective C,我有一个很不寻常的要求,但无论如何 @property (weak, nonatomic) IBOutlet UIDatePicker *dateDatePicker; 当我读取dateDatePicker.date时,它将NSDate集返回到当前系统的时区。但我希望它在不同的特定时区 假设现在是中央时间下午3:50。 dateDatePicker.date返回CST下午3:50 我想要这样的东西: [dateDatePicker setTimeZone:@"EST"] NSDate *EST

我有一个很不寻常的要求,但无论如何

@property (weak, nonatomic) IBOutlet UIDatePicker *dateDatePicker;
当我读取dateDatePicker.date时,它将NSDate集返回到当前系统的时区。但我希望它在不同的特定时区

假设现在是中央时间下午3:50。 dateDatePicker.date返回CST下午3:50

我想要这样的东西:

[dateDatePicker setTimeZone:@"EST"]
NSDate *ESTDate = dateDatePicker.date;

。。。然后我希望调试器显示“2:50pm CST”-因为东部时间的3:50pm是2:50CST

这可能比你想象的要简单。如果您的日期是CST下午3:50,而您希望它是CST下午2:50,只需减去一小时:

date = [date dateByAddingTimeInterval:-3600];
当然,本地时区可能并不总是CST,因此您可以获得两个时区之间的差异,并使用它代替硬编码-3600:

NSString *targetTimeZoneName = @"US/Eastern";
NSInteger localOffset = [[NSTimeZone localTimeZone] secondsFromGMTForDate:date];
NSInteger targetOffset = [[NSTimeZone timeZoneWithName:targetTimeZoneName] secondsFromGMTForDate:date];
NSInteger timeZoneDelta = localOffset - targetOffset;

date = [date dateByAddingTimeInterval:timeZoneDelta];

UIDatePicker
时区
属性在使用时不是字符串。您必须向它传递一个
NSTimeZone
对象


而且,
NSDate
s没有时区。这只是历史上的一个瞬间,它的字符串表示取决于时区。使用
NSDateFormatter
为所需时区设置日期对象的格式。

在我看来,日期选择器应该是一个强有力的参考。您可能不会遇到任何问题,因为它由它的superview保留,但它也应该由所有者保留,我猜,所有者是您的视图控制器,以防您临时将其从视图层次结构中删除。