【问题标题】:Calculate date and time corresponding to different timezone计算不同时区对应的日期和时间
【发布时间】:2013-05-16 13:45:08
【问题描述】:

我有一个 ipad 应用程序,它可以在 y 轴上绘制一个随时间变化的图表。现在我的问题是,用户可以在世界任何地方访问相同的图表。但随后应调整图表上的时间,使其与用户的当前时区相对应。因此,图表上的时间应补偿时区之间的任何时间差异。如果我通过发送图表的设备的时区,谁能告诉我如何从当前设备获取时区并计算偏移时间。

这是我的日期格式化功能。我打算将时区也与日期一起传递。

+(NSDate *)DateUKFormatFromString:(NSString *)date
{
  NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init] ;
  NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"];
  [dateFormatter setLocale:locale];
  [dateFormatter setDateFormat:@"dd/MM/yyyy HH:mm:ss"];
  NSDate* returnDate = [dateFormatter dateFromString:date];    
  return returnDate;
}

提前致谢。

【问题讨论】:

    标签: iphone ios timezone nsdateformatter


    【解决方案1】:

    有一个dateFormatter实例方法setTimeZone:这样使用

    [NSTimeZone resetSystemTimeZone];
    [dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
    

    有关这两种方法的信息,请阅读文档。希望能帮助到你。干杯

    编辑:

    如果来自服务器的日期是针对特定时区(服务器的时区)的。然后你需要获取时区

    NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:"Server timezone name"];
    NSInteger serverDifference = [timeZone secondsFromGMT];
    
    [NSTimeZone resetSystemTimeZone];
    NSTimeZone *systemTimeZone = [NSTimeZone systemTimeZone];
    NSInteger systemDifference = [systemTimeZone secondsFromGMT];
    
    NSInteger difference = systemDifference - serverDifference;
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:difference]];
    

    如果您没有从服务器获得 0 GMT 时差,请尝试此操作。

    【讨论】:

    • 这仅适用于来自服务器的日期 sendet 或它具有 CMT 0 时区的字符串日期,否则它将为日期添加额外的时间。
    • 请注意secondsFromGMT 返回当前 偏移量。偏移量可能会根据您使用的日期而变化。如果您没有使用“现在”值,那么您应该改用secondsFromGMTForDate。见these docs
    【解决方案2】:
    +(NSDate *)DateUKFormatMonthFromString:(NSString *)date AndTimeZoneName:(NSString *) timeZoneName
    {
    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
    [formatter setDateFormat:@"MM/dd/yyyy HH:mm:ss"];
    NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:timeZoneName];
    [formatter setTimeZone:timeZone];
    NSDate *date1 = [formatter dateFromString:date];
    [formatter setTimeZone:[NSTimeZone systemTimeZone]];
    return date1; 
    }
    

    最后,这对我有用......似乎iOS会自己处理时区差异......!!!

    【讨论】:

      猜你喜欢
      • 2021-03-22
      • 2016-09-30
      • 2012-07-18
      • 2021-11-28
      • 2015-11-07
      • 1970-01-01
      • 2016-02-02
      • 2020-02-14
      • 1970-01-01
      相关资源
      最近更新 更多