我正在使用datepicker
来挑选time
,但在我回收后发送到服务器时,它显示了5-6小时的差异。
在美国托管的服务器。
所以我将如何准确地做到没有任何区别,用户可以从任何地方请求。
谢谢,
阿伦
答案 0 :(得分:1)
UTC是要使用的标准时区。以下是以UTC格式获取日期的代码
+(NSString *)getCurrentTime{
NSDate *date = [NSDate date];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-ddHH:mm:ss"];
[dateFormat setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
NSString *dateStr = [dateFormat stringFromDate:date];
RELEASE_OBJECT(date)
RELEASE_OBJECT(dateFormat)
return dateStr;
}
答案 1 :(得分:0)
如果您将iPhone的默认时间发送到服务器并且服务器也发送的时间与您发送的时间相同,那么将NSDate
转换为NSString
并NSDateFormater
将会出现问题有一些不同的时区。
[dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
使用NSDateFormater
时使用上述代码。
希望这会对你有所帮助。
一切顺利!!!
答案 2 :(得分:0)
使用时区发送日期。例如:
NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"];
NSDate *date = [formatter dateFromString:dateString];
将包含时区,服务器将能够转换为自己的时区。
我们使用ISO 8601来提高兼容性。还有NSFormatter子类可以从ISO 8601转换为NSDate并返回(like this)。
答案 3 :(得分:0)
这是时区问题。您可以使用[yourDate dateByAddingInterval:[NSTimeZone secondsFromGMT]];
。
答案 4 :(得分:0)
请尝试设置当前的区域设置:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"dd MM yyyy hh:mm:ss"]; [dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease]]; NSDate* sourceDate = [dateFormatter dateFromString:dateString]; //Timezones NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"]; NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone]; //Interval in Timezones NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate]; NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate]; NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset; //converted date NSDate* destinationDate = [[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate] ; NSString *strFinalDate = [dateFormatter stringFromDate:destinationDate]; [dateFormatter release]; [destinationDate release];