2017-07-31 91 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);