【问题标题】:Timezone changes in reverse direction时区反向变化
【发布时间】:2014-01-21 17:39:19
【问题描述】:

因此,我目前将 14:45 EST 更改为 GMT,即 19:45 GMT,因为有 5 小时的时差。然而,我的代码正在做的是,它正在反转时间,而不是显示格林威治标准时间 19:45,这是显示 09:45 的正确时间,结果是 -5 小时而不是我想要的 +5 小时。

这是我目前正在使用的代码

       NSDateFormatter* df_utc = [[NSDateFormatter alloc] init];
        [df_utc setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"EST"]];
        [df_utc setDateFormat:@"HH:mm"];

        NSDateFormatter* df_local = [[NSDateFormatter alloc] init];
        [df_local setTimeZone:[NSTimeZone systemTimeZone]];
        [df_local setDateFormat:@"HH:mm"];

        NSString *ts_utc_string = [df_utc stringFromDate:dateFromString];

        NSString *ts_local_string = [df_local stringFromDate:dateFromString];

        NSLog(@"UTC TIME: %@",ts_utc_string);
        NSLog(@"LOCAL TIME: %@",ts_local_string);

基本上 UTC TIME 打印 09:45 而 LOCAL TIME: 打印 14:45,但是我想 UTC 时间打印 19:45。

[NSTimeZone systemTimeZone] = GMT +0;

【问题讨论】:

    标签: iphone objective-c nsdate nsdateformatter


    【解决方案1】:

    您已将“EST”时区分配给df_utc,并将系统时区 (GMT) 分配给 df_local。应该是相反的。

    请注意,[NSTimeZone timeZoneForSecondsFromGMT:0] 是获取 UTC/GMT 的更好方法 时区,不依赖系统时区。

    您还将同一日期转换为字符串两次,而不是“字符串 (EST) -> 日期 -> 字符串 (UTC)”。以下代码会产生您期望的结果:

    NSString *ts_local_string = @"14:45";
    
    NSDateFormatter* df_utc = [[NSDateFormatter alloc] init];
    [df_utc setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
    [df_utc setDateFormat:@"HH:mm"];
    
    NSDateFormatter* df_local = [[NSDateFormatter alloc] init];
    [df_local setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"EST"]];
    [df_local setDateFormat:@"HH:mm"];
    
    NSDate *date = [df_local dateFromString:ts_local_string];
    NSString *ts_utc_string = [df_utc stringFromDate:date];
    
    NSLog(@"UTC TIME: %@",ts_utc_string);
    NSLog(@"LOCAL TIME: %@",ts_local_string);
    

    输出:

    世界标准时间:19:45 当地时间:14:45

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多