代码之家  ›  专栏  ›  技术社区  ›  casillas

在NSDateFormatter中将UTC转换为CST

  •  0
  • casillas  · 技术社区  · 8 年前

    我正在使用以下字符串,但它来自 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);
    

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

    并尝试了

    [df_local setTimeZone:[NSTimeZone timeZoneWithName:@"America/Chicago"]];
    
    4 回复  |  直到 8 年前
        1
  •  3
  •   Nirmalsinh Rathod    8 年前

    试试这个答案:

     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);
    
        2
  •  2
  •   CRD    8 年前

    首先,您需要处理时间中的秒数:

    [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公司

        3
  •  1
  •   Charles Srstka    8 年前

    一些想法:

    1. 正如Steven提到的,你的dateFormat确实需要在末尾包含:ss。

    2. 如果没有具体原因需要CST,但问题是这是一个恰好位于中央时区的公司的内部应用程序,那么我建议使用[NSTimeZone defaultTimeZone]。如果有人突然需要在其他地方使用你的应用程序,它可以让你的应用程序继续工作,同时也可以自动处理诸如夏令时之类的事情。

    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);
    
        4
  •  0
  •   Allen.L    8 年前

    我认为,你应该改变你的 dateFormat 从…起 yyyy-MM-dd HH:mm yyyy-MM-dd HH:mm:ss .

    推荐文章