应该是PM时,NSDateFormatter返回AM

时间:2014-02-19 09:38:26

标签: ios objective-c nsdate nsdateformatter

我想要在下午4:00表格中显示NSDate。

NSDate *time = [object objectForKey:@"time"];
NSLog(@"time: %@", time);
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.locale = [NSLocale currentLocale];
[dateFormatter setDateFormat:@"h:mm a"];
timeLabel.text = [dateFormatter stringFromDate:time];

日志返回:

2014-03-08 13:00:00 +0000

但是timeLabel.text读取凌晨1点,应该是pm。知道发生了什么事吗?

3 个答案:

答案 0 :(得分:4)

您忘了添加时区。剩下的很好。您必须为格式化程序指定一个时区,否则它将使用您当地的

还要注意使用NSLog ALWAYS记录打印UTC日期

使用[formatter setTimezone:timeZoneXY]

答案 1 :(得分:0)

NSDate *time = [object objectForKey:@"time"];
NSLog(@"time: %@", time);

您的时间变量时间格式为24小时格式。这样它显示NSLog 13.00。

之后,您可以使用转换器12小时格式,就像它显示上午/下午样式

一样
[dateFormatter setDateFormat:@"h:mm a"];

注意:

HH - 字母H表示24小时格式

hh - 小写字母h表示12小时格式

答案 2 :(得分:0)

您可以使用以下代码:

NSString *str=@"17-02-2014 05:00 PM";
NSDateFormatter *dateFormatter=[[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"dd-MM-yyyy hh:mm a"];
NSDate *datetoday=[dateFormatter dateFromString:str];
[dateFormatter setDateFormat:@"yyyy-MM-dd hh:mm:ss Z"];
NSString *strdate=[dateFormatter stringFromDate:datetoday];
NSLog(@"%@",strdate);