在NSDateFormatter中将UTC转换为CST

时间:2017-07-31 02:29:32

标签: ios objective-c nsdateformatter

我要使用以下字符串,但它来自UTC-0,我需要将其转换为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);

我甚至尝试了以下选项,没有运气..仍然会返回nil。

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

并尝试了

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

4 个答案:

答案 0 :(得分:3)

试试这个答案:

--recursive --timeout 120000 --bail

答案 1 :(得分: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

答案 2 :(得分:1)

一些想法:

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

  2. 正如史蒂文所说,你的dateFormat确实需要在最后包含:ss。

  3. 如果您没有特定原因需要CST,而是问题就像是一个恰好位于中心时区的公司的内部应用,那么我和#39;建议使用[NSTimeZone defaultTimeZone]代替。如果有人突然需要在其他地方使用它,你的应用程序可以继续使用Just Working™,并且还会自动处理夏令时等事情。

  4. 尽管如此,这里有一些应该做你想做的代码:

    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);
    

答案 3 :(得分:0)

我认为您应该将dateFormatyyyy-MM-dd HH:mm更改为yyyy-MM-dd HH:mm:ss