在 NSDateFormatter 中将 UTC 转换为 CST
Convert UTC to CST in NSDateFormatter
我正在使用以下字符串,但它来自 UTC-0
,我需要将其转换为 CST
。
serverdate = @ "2017-07-31 02:18:50";
我添加了下面的代码,但是 returns 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);
我什至尝试了以下选项,没有运气..仍然是 returns 零。
[dfLocal setTimeZone:[NSTimeZone timeZoneWithName:@"CDT"]];
尝试过
[df_local setTimeZone:[NSTimeZone timeZoneWithName:@"America/Chicago"]];
我认为,您应该将 dateFormat
从 yyyy-MM-dd HH:mm
更改为 yyyy-MM-dd HH:mm:ss
。
首先你需要处理时间中的秒数:
[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
一些想法:
你实际上需要在这里做两件事;首先,您需要将从服务器收到的 UTC 日期字符串解析为日期,其次,您需要将该日期显示为 CST 中的字符串。
您的 dateFormat 确实需要在末尾包含 :ss,正如史蒂文提到的那样。
如果没有特定原因需要 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);
试试这个答案:
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);
我正在使用以下字符串,但它来自 UTC-0
,我需要将其转换为 CST
。
serverdate = @ "2017-07-31 02:18:50";
我添加了下面的代码,但是 returns 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);
我什至尝试了以下选项,没有运气..仍然是 returns 零。
[dfLocal setTimeZone:[NSTimeZone timeZoneWithName:@"CDT"]];
尝试过
[df_local setTimeZone:[NSTimeZone timeZoneWithName:@"America/Chicago"]];
我认为,您应该将 dateFormat
从 yyyy-MM-dd HH:mm
更改为 yyyy-MM-dd HH:mm:ss
。
首先你需要处理时间中的秒数:
[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
一些想法:
你实际上需要在这里做两件事;首先,您需要将从服务器收到的 UTC 日期字符串解析为日期,其次,您需要将该日期显示为 CST 中的字符串。
您的 dateFormat 确实需要在末尾包含 :ss,正如史蒂文提到的那样。
如果没有特定原因需要 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);
试试这个答案:
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);