[英]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.