ios中的日期和时间问题

时间:2013-03-22 09:28:44

标签: ios objective-c datetime

我正在使用datepicker来挑选time,但在我回收后发送到服务器时,它显示了5-6小时的差异。

在美国托管的服务器。

所以我将如何准确地做到没有任何区别,用户可以从任何地方请求。

谢谢,

阿伦

5 个答案:

答案 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转换为NSStringNSDateFormater将会出现问题有一些不同的时区。

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