gpt4 book ai didi

ios - NSDate和TimeZone问题

转载 作者:行者123 更新时间:2023-12-01 16:44:00 25 4
gpt4 key购买 nike

我正在尝试让我的应用根据预定事件触发通知。给出的日期来自将于EST进行的时间表。给出的时间是2014年2月21日星期五,美国东部时间中午12:00:00 -0500。

当按下安排通知的按钮时,它将运行以下代码:

NSString *message = [@"15 minutes until " stringByAppendingString:self.thetitle];
NSLog(@"original%@", self.thedate);
NSDate *newDate = [self.thedate dateByAddingTimeInterval:-60*15];
NSDateFormatter *formatter3 = [[NSDateFormatter alloc] init];

// [formatter3 setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
[formatter3 setTimeStyle:NSDateFormatterShortStyle];
[formatter3 setDateStyle:NSDateFormatterShortStyle];
NSString *detailstext = [formatter3 stringFromDate:newDate];
NSDate *othernewdate = [formatter3 dateFromString:detailstext];
NSLog(@"other%@", othernewdate);
UILocalNotification *notification = [[UILocalNotification alloc] init];
notification.timeZone = [NSTimeZone systemTimeZone];
notification.fireDate = othernewdate;
notification.alertBody = message;
notification.soundName = UILocalNotificationDefaultSoundName;
notification.hasAction = YES;
notification.alertAction = NSLocalizedString(@"View", @"View notification button");

[[UIApplication sharedApplication] scheduleLocalNotification:notification];

由于在通知fireDate上设置的时间是othernewdate,因此我在控制台中运行了NSLog来查看其显示的内容。它回来了:
2014-02-21 16:45:00 +0000

这似乎是完美的,因为在EST的时间应该是上午11:45,或者中午前15分钟,这正是我想要的。

问题是这样的:
我正在CST中对此进行测试。我运行该应用程序,告诉它为该事件安排通知,然后将我的电话时钟更改为EST,最终在10:45触发该通知。

会有人在不同时区使用此应用程序,然后前往EST进行该应用程序所在的 session 的开始时间。我不希望他们在其他时区安排很多通知,并在错误的时间触发通知。有什么建议?

最佳答案

如果希望通知在绝对日期/时间(与时区无关)处触发,则必须设置notification.timezone = nil

从文档中:

“fireDate中指定的日期将根据该属性的值进行解释。如果您指定nil(默认值),则触发日期将被解释为绝对GMT时间,适用于诸如倒数计时器的情况。如果您分配了对于此属性是有效的NSTimeZone对象,触发日期被解释为挂钟时间,该挂钟时间会在时区发生更改时自动调整;适合这种情况的示例是闹钟。”

关于ios - NSDate和TimeZone问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21693203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com