所以我目前正在美国东部时间14:45改为格林尼治标准时间格林威治标准时间19:45,因为这有5个小时的差异。然而,我的代码正在做的是,它正在扭转时间,而不是显示19:45 GMT,这是正确的时间显示09:45,结果是-5小时而不是+5小时,就像我想要的那样。 / p>
这是我目前正在使用的代码
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;
答案 0 :(得分:0)
您已将“EST”时区分配给df_utc
,并将系统时区(GMT)分配给
df_local
。它应该是另一种方式。
请注意[NSTimeZone timeZoneForSecondsFromGMT:0]
是获取UTC / GMT的更好方法
时区,不依赖于系统时区。
此外,您将同一日期转换为字符串两次,而不是“string(EST) - > date - > string(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);
输出:
UTC TIME: 19:45 LOCAL TIME: 14:45