我有一个字符串,我想解析时间:
NSString *longdate = @"Mar 27, 2011 8:38:38 PM";
我想解析这个日期并输出时间部分w /小时+分钟+上午/下午:
// First, convert our string into an NSDate
NSDateFormatter *inFormat = [[NSDateFormatter alloc] init];
[inFormat setDateFormat:@"MMM dd, yyyy HH:mm:ss aaa"];
NSDate *date = [inFormat dateFromString:longdate];
[inFormat release];
// Now convert from date back to a string
NSDateFormatter *outFormat = [[NSDateFormatter alloc] init];
[outFormat setDateFormat:@"HH:mm aaa"];
NSString *final = [outFormat stringFromDate:date];
[outFormat release];
NSLog(@"original: %@ | final %@", longdate, final);
问题是最后时间是错误的。我希望时间是晚上8:38,但我得到的是下午12:38。
我只是希望得到我所说的相同的小时,而不是打扰任何时区或区域。我在这做错了什么?感谢。
答案 0 :(得分:6)
发现问题。与时区无关,与使用日期格式化程序的错误格式代码有关。
[inFormat setDateFormat:@"MMM dd, yyyy HH:mm:ss aaa"];
应该是:
[inFormat setDateFormat:@"MMM dd, yyyy h:mm:ss aaa"];
同样,outFormat的dateformat应为:
[outFormat setDateFormat:@"h:mm aaa"];
在进行此调整后,即使没有任何TimeZone调整,一切正常。
答案 1 :(得分:1)
正如戴夫所说,检查你的时区。您也可以告诉日期格式化程序使用当前时区:
[outFormat setTimeZone:[NSTimeZone localTimeZone]];
答案 2 :(得分:0)
你的时区搞砸了。 IIRC,NSDateFormatter
(默认情况下)将解析UTC时区(+000)中的内容,但当前时区中的日期为NSLog
。或类似的东西。
无论如何,检查你的时区。
答案 3 :(得分:-1)
NSString *longdate = @"2013-04-29 10:20 PM";
// First, convert our string into an NSDate
NSDateFormatter *inFormat = [[NSDateFormatter alloc] init];
[inFormat setTimeZone:[NSTimeZone localTimeZone]];
[inFormat setDateFormat:@"yyyy-MM-dd hh:mm aa"];
NSDate *date = [inFormat dateFromString:longdate];
// Now convert from date back to a string
NSDateFormatter *outTimeFormat = [[NSDateFormatter alloc] init];
[outTimeFormat setDateFormat:@"hh:mm aaa"];
NSString *finalTime = [outTimeFormat stringFromDate:date];
NSDateFormatter *outDateFormat = [[NSDateFormatter alloc] init];
[outDateFormat setDateFormat:@"yyyy-MM-dd"];
NSString *finalDate = [outDateFormat stringFromDate:date];
NSLog(@"Date:%@ and Time :%@",finalDate,finalTime);