繁体   English   中英

NSDate和不同的时区?

[英]NSDate and different timezones?

好的。 我们的应用程序发送一个以当前用户的用户名和以yyyyMMddHH格式表示的今天日期组成的NSString 位于瑞典的我们的服务器使用完全相同的String并在接到呼叫时将两者进行比较。

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

假设iPhone用户位于韩国首尔。 他发送的NSString类似于:

2011061718

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

2011061711

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

总结一下:

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

Atm我们这样做:

NSDate *aDate = [aDateFormatter stringFromDate:[NSDate date]]; 

并以某种方式需要时区并比较用户实际时区之间的差异,并将其更改为瑞典时区。

有任何想法吗?

编辑:好的。 此应用程序仅打算在瑞典发布。 而且,我们结合使用了用户名和yyyyMMddHH格式的当前日期来创建安全密钥,该密钥用于在新的小时开始时进行自我更新。 该服务器位于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内容。

不要为此而烦恼。 以字符串形式发送完整的日期时间,并让服务器确定时间。

NSString *dtString = [[NSDate date] description];

这将创建一个具有以下格式的字符串

YYYY-MM-DD HH:MM:SS ±HHMM

使用-[NSDateFormatter setTimeZone:] NSDate与它无关,因为它不在乎时区。

顺便说一句,如果用户使用其他日历,您的代码也会失败。

同样要注意的是,如果您将dateformatter上的AM / PM功能打开,即使您未将其放入格式字符串中,也会弹出“ AM / PM”。 要解决此问题,还可以在DateFormatter中添加一个NSLocale。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM