2017-07-31 51 views
0

我收到以下字符串,但它来自UTC-0,我需要将其转换为CST将UTC转换为NSDateFormatter中的CST

serverdate = @ "2017-07-31 02:18:50"; 

添加以下代码,但它返回nil

NSDateFormatter *dfLocal = [[NSDateFormatter alloc] init]; 
[dfLocal setDateFormat:@"yyyy-MM-dd HH:mm"]; 
[dfLocal setTimeZone:[NSTimeZone timeZoneWithName:@"CST"]]; 

NSString *time =[dfLocal stringFromDate:serverdate]; 
NSLog(@"%@", time); 

我甚至尝试下列选项中,没有运气..还是返回零。

[dfLocal setTimeZone:[NSTimeZone timeZoneWithName:@"CDT"]]; 

,并试图

[df_local setTimeZone:[NSTimeZone timeZoneWithName:@"America/Chicago"]]; 
+0

有一个名为CST没有这样一个时区。 –

+0

'中央标准时间(CST)'https://www.timeanddate.com/time/zones/cst,我甚至尝试过'CDT',同样的结果,它返回'nil' – hotspring

+0

Duplicate:https://stackoverflow.com/questions/38766557/nsdateformatter-to-format-server-response-in-mmm-dd-yyyy-format。 –

回答

2

首先,你需要处理秒的时间:

[dfLocal setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 

下一页设置时区为UTC和转换您的字符串:

[dfLocal setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]]; 
NSDate *serverUTC = [dfLocal dateFromString:serverdate]; 

现在更改时区和转换回字符串:

[dfLocal setTimeZone:[NSTimeZone timeZoneWithName:@"America/Chicago"]]; 
NSString *time =[dfLocal stringFromDate:serverUTC]; 

使用America/Chicago,因为那样会正确处理DST。

HTH

0

我想,你应该将dateFormatyyyy-MM-dd HH:mm改变yyyy-MM-dd HH:mm:ss

1

的一点想法:

  1. 实际上,你需要做两个不同的事情;首先,您需要将从服务器收到的UTC日期字符串解析为日期,其次,您需要在CST中将该日期显示为字符串。

  2. 您的dateFormat确实需要在最后包含:ss,就像Steven提到的那样。

  3. 如果没有特定的理由需要CST,但问题是这样的事情是一个公司的内部应用程序恰好位于中央时区,那么我建议使用[改为NSTimeZone defaultTimeZone]。如果有人突然需要在其他地方使用它,这可以让您的应用继续使用Just Working™,并且还会自动处理日光节约等事情。

与所有的说,这里的一些代码,应该做你想要什么:

NSString *serverdate = @"2017-07-31 02:18:50"; 

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
[formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; 

NSDate *date = [formatter dateFromString:serverdate]; 

// [NSTimeZone timeZoneWithName:@"CST"] should work too 
[formatter setTimeZone:[NSTimeZone defaultTimeZone]]; 

NSString *time = [formatter stringFromDate:date]; 
NSLog(@"%@", time); 
1

尝试这样的回答:

NSString *strInputDateString = @"2017-07-31 02:18:50"; 
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
    [dateFormat setDateFormat:@"YYYY-MM-dd hh:mm:ss"]; 
    //Set new dateFormate 

    NSDate *date1 = [dateFormat dateFromString:strInputDateString]; 
    [dateFormat setDateFormat:@"dd-MM-YYYY hh:mm:ss"]; 
    [dateFormat setTimeZone:[NSTimeZone timeZoneWithName:@"CST"]]; 

    NSString *strOutputDateString = [dateFormat stringFromDate:date1]; 
    NSLog(@"%@",strInputDateString); 
    NSLog(@"%@",strOutputDateString);