时区在相反方向变化
问题描述:
因此,我目前正在更改14:45东部标准时间格林威治标准时间19:45,因为有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时间打印09:45,而当地时间代码:打印14:45,但是我想UTC时间打印19:45。
[NSTimeZone systemTimeZone] = GMT +0;
答
您已经分配了 “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);
输出:
UTC TIME: 19:45 LOCAL TIME: 14:45