iphone - NSDate 和不同的时区?

标签 iphone objective-c ios timezone nsdate

好的。我们的应用程序发送一个 NSString由当前用户的用户名和今天的日期组成,格式为 yyyyMMddHH .我们位于瑞典的服务器提供完全相同的 String并在接到电话时比较两者。

现在。我们已经意识到,如果我们的用户之一出国,时区将会改变,从而导致复杂性。

如果 iPhone 用户在韩国首尔。他的NSString发送的内容类似于:

2011061718

同时,当我们的服务器收到调用时,它将以这种格式重新创建自己的日期字符串,因为它位于瑞典。
2011061711

因此拒绝用户访问服务器端的功能。

总结一下:

如何以编程方式在我的应用程序中设置默认静态时区?

Atm 我们这样做:
NSDate *aDate = [aDateFormatter stringFromDate:[NSDate date]]; 

不知何故,我们需要时区并比较用户实际时区之间的差异并将其更改为瑞典时区。

有任何想法吗?

编辑:行。此应用程序仅打算在瑞典发布。我们使用用户的用户名和当前日期(格式为 yyyyMMddHH)的组合来制作安全 key ,该 key 旨在在新的时间开始时自行更新。服务器位于瑞典 GMT+1 时区,验证用户是在使用应用程序的实际设备上,而不是让自己的客户对我们的服务进行肥皂调用的人。

因此,如果我们的用户之一超出时区,它将拒绝该用户,因为字符串不匹配。

这就是为什么我们要始终为该函数设置默认时区 GMT+1。这就是我们真正想要的。

谢谢。再次。

最佳答案

如果您需要让客户端格式化日期,请执行以下操作:

NSDate *now = [NSDate date];

NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"Europe/Stockholm"]; // Sets the right time.
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; // Forces the date formatter to accept any format string.
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setCalendar:gregorianCalendar];
[formatter setTimeZone:timeZone];
[formatter setDateFormat:@"yyyyMMddHH"];
[formatter setLocale:locale];

NSString *dateString = [formatter stringFromDate:now];

NSLog(@"Date: %@", dateString);

[locale release];
[gregorianCalendar release];
[formatter release];

日期格式化程序将为您完成所有工作,您只需对其进行配置。

通过设置公历,您将使用与瑞典相同的日历。

通过设置时区,您将获得瑞典的时间。

通过将语言环境设置为“en_US_POSIX”,您可以使格式化程序使用您指定的确切格式,而不是附加任何 AM/PM 内容。

关于iphone - NSDate 和不同的时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6383799/

相关文章:

ios - UIImagePickerController:如何允许编辑但隐藏裁剪选项

ios - 如何使用SDWebImage

objective-c - 在 Interface Builder 中使用单例?

ios - 防止一次显示多个 UIPopover

ios - 解析通过 Alamofire (Swift) 收到的 JSON 数据时出错

ios - 抽屉导航- ios 中的滑动问题

c# - iOS:缺少条形样式外观的 Monotouch 绑定(bind)?

iphone - Xcode 本地化让我抓狂!不加载 Storyboard

iphone - 圆圈到圆圈的碰撞 react - 同等优先级

objective-c - 如何使窗口处于事件状态或获得焦点?