NSDate和不同的时区?

Jen*_*all 1 iphone timezone objective-c nsdate ios

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

现在.我们已经意识到,如果我们的一个用户出国,时区会发生变化,从而导致并发症.

如果iPhone用户可以说,首尔,韩国.他NSString的发送将是这样的:

2011061718
Run Code Online (Sandbox Code Playgroud)

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

2011061711
Run Code Online (Sandbox Code Playgroud)

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

总结一下:

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

我们这样做:

NSDate *aDate = [aDateFormatter stringFromDate:[NSDate date]]; 
Run Code Online (Sandbox Code Playgroud)

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

有任何想法吗?

编辑:好的.此应用程序仅适用于瑞典发布.而我们使用的是用户的用户名的组合,并且在YYYYMMDDHH的格式的当前日期进行安全关键,关键是指每当一个新的开始时间来更新自己.服务器,它位于瑞典GMT + 1的时区,使验证用户是使用的应用程序,而不是别人谁做了他自己制造肥皂呼叫的客户对我们的服务在实际设备上.

因此,如果我们的某个用户超出时区,它将拒绝用户,因为字符串不匹配.

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

谢谢.再次.

Mor*_*ast 5

如果您需要使客户端格式化日期,这是如何做到的:

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];
Run Code Online (Sandbox Code Playgroud)

日期格式化程序将为您完成所有工作,您只需配置它.

通过设置格里历日历,您使用的日历与瑞典相同.

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

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