时区在相反方向变化

时区在相反方向变化

问题描述:

因此,我目前正在更改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