Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.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 更改活动时区是否会影响共享活动中的其他人?_Ios_Objective C_Nsdate_Nsdateformatter_Ekevent - Fatal编程技术网

Ios 更改活动时区是否会影响共享活动中的其他人?

Ios 更改活动时区是否会影响共享活动中的其他人?,ios,objective-c,nsdate,nsdateformatter,ekevent,Ios,Objective C,Nsdate,Nsdateformatter,Ekevent,如果我要使用NSDateFormatter规范化EKEvent的startDate属性,并将时区设置为 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"hh:mm a"]; [formatter setTimeZone:[NSTimeZone systemTimeZone]]; event.startDate = [formatter dateFromString:

如果我要使用
NSDateFormatter
规范化
EKEvent
的startDate属性,并将时区设置为

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"hh:mm a"];
[formatter setTimeZone:[NSTimeZone systemTimeZone]];

 event.startDate = [formatter dateFromString:[NSString stringWithFormat:@"%@", [event.startDate]]];
后来我对那个事件做了一个改变,要求我打电话

[self.event.eventStore saveEvent:currentEvent span:EKSpanThisEvent commit:YES error:nil];
它会覆盖服务器上的时区,导致最初创建共享日历事件的另一个状态的人员(使用GCal)出现问题,还是只是本地更改


如果它确实影响了事件,那么对于我来说,什么是确保应用程序端的事件始终代表用户当前时区的最佳方式,而无需每次在UI上引用事件时更改事件格式?

是事件的时区将同步。如果某个事件发生在9山地时间,则对于将设备常规设置设置为山地时间的任何人,该事件将显示为9发生。如果他们的设备是东部时间,事件将出现在7点。如果将事件的时区更改为东部,则山区时间设备现在将看到事件发生在11,东部时间设备将看到事件发生在9。因此,更改时区不会更改它在自己的时区中发生的时间,但会相对于您移动它的位置更改它

在询问用户事件发生的时间后,您可以做2件事:1)您可以假设事件发生在用户设备的当前时区。2) 您可以询问他们事件发生的位置,并将事件时区设置为该时区

如果您有一个时间错误的事件,您应该首先将其时区设置为事件实际发生的位置,然后将事件发生的时间更改为事件实际发生的时间,即事件实际发生的位置


如果您只关注正确获取事件集上的数据,它将正确显示在与您共享日历的每个设备上。

如果EKEvent.startDate和endDate属性在两个时区都位于同一天,并且我更改了endDate(向前几个小时)它仍然在我所在时区的同一天,但对于其他用户的日历,它会在他的日历上显示为跨越这两天吗?我假设服务器上的时区会解决这个问题?澄清一下,它应该在下一天显示在其他用户的日历上,而不是在早上的同一天?比如在我的日历上把日期改为星期二晚上11点,我希望是他的日历上星期三凌晨3点,它将以这样的方式显示,并且NSDate不会换行到周二凌晨3:00?如果您希望事件在特定时间(如上午9点)开始,而不考虑时区,请在系统时区中将日期设置为上午9点,然后将时区属性设置为零。请查看EKEvent关于时区属性的文档。如果事件时区设置为您的时区(在您的时区中按位置显示),结束日期为晚上11点,如果其他人比您早4小时,则您是正确的,它将在他的日历上显示为第二天凌晨3点结束。将共享日历的时区设置为零似乎是个坏主意。将timezone属性设置为nil只能在我个人日历上的事件上进行,因为在我看来,如果我在不同的时区度假,那么在我回家“轮班”几个小时后看到我所有的事件都会让人感到困惑和有些吃惊。我希望我的活动看起来像我回家时一样。在这种情况下,将event timeZone属性设置为nil是有意义的。