【问题标题】:Date and Time issue in ios [duplicate]ios中的日期和时间问题[重复]
【发布时间】:2021-10-05 06:24:32
【问题描述】:

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

服务器托管在美国。

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

谢谢,

阿伦

【问题讨论】:

  • 从服务器获取日期的格式是什么?
  • 请出示您的代码并说明使用哪种格式将日期发送到服务器并读回。很可能是时区问题。
  • 时间即将到来 2013 年 3 月 20 日上午 11:45 甲

标签: ios objective-c datetime


【解决方案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;
}

【讨论】:

    【解决方案2】:

    发送带有时区的日期。例如:

    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】:

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

      【讨论】:

        【解决方案4】:

        请尝试设置时间的语言环境:

        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]; [日期格式化程序发布]; [目的地发布日期];

        【讨论】:

          【解决方案5】:

          如果您将 iPhone 默认时间发送到服务器,并且服务器也发送与您发送它的时间相同的时间,那么将您的 NSDate 转换为 NSStringNSDateFormatter 与一些不同的时区将是问题.

          [dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
          

          使用NSDateFormatter时使用上述代码。

          【讨论】:

            猜你喜欢
            • 2012-07-30
            • 2012-02-27
            • 1970-01-01
            • 1970-01-01
            • 2014-02-04
            • 1970-01-01
            • 2012-06-03
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多