2013-03-22 73 views
-1

我使用datepicker来挑选time,但在发送到服务器时,当我检索回来时,它显示5-6小时的差异。ios中的日期和时间问题

服务器在美国托管。

所以我如何准确无误地做到这一点,用户从任何地方做请求。

感谢,

阿伦

+0

你获得从服务器中的日期? – 2013-03-22 09:34:08

+1

请显示您的代码并解释用于将日期发送到服务器的格式并将其读回。很可能是一个时区问题。 – 2013-03-22 09:35:18

+1

[我应该复制粘贴这个吗?](http://stackoverflow.com/a/7213629/1756131) – 2013-03-22 09:36:10

回答

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; 
} 
0

如果您发送您的iPhone默认的时间到服务器和服务器还与发送,你必须把它然后同时这将是转换你NSDate的问题NSStringNSDateFormater与一些不同的时区。

[dateFormatter setTimeZone:[NSTimeZone systemTimeZone]]; 

当您使用NSDateFormater时,使用上述代码。

希望这会帮助你。

所有最好的!

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)。

0

这是时区问题。您可以使用[yourDate dateByAddingInterval:[NSTimeZone secondsFromGMT]];

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];