-1

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

服务器托管在美国。

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

谢谢,

阿伦

4

5 回答 5

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;
}
于 2013-03-22T09:38:22.450 回答
0

如果您将 iPhone 默认时间发送到服务器,并且服务器也发送与您发送它的时间相同的时间,那么将您的时间转换NSDateNSString具有NSDateFormatter不同时区的问题。

[dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];

使用时使用上面的代码NSDateFormatter

于 2013-03-22T09:35:07.187 回答
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 并返回(像这样)。

于 2013-03-22T09:36:02.097 回答
0

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

于 2013-03-22T09:49:51.417 回答
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];

    //时区
    NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];
    NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];

    //时区间隔
    NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate];
    NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate];
    NSTimeInterval 间隔 = 目的地GMTOffset - 来源GMTOffset;

    //转换日期
    NSDate* destinationDate = [[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate] ;
    NSString *strFinalDate = [dateFormatter stringFromDate:destinationDate];

    [日期格式化程序发布];

    [目的地发布日期];


于 2013-03-22T09:51:12.080 回答