Iphone 为字符串日期写入适当的时间戳

Iphone 为字符串日期写入适当的时间戳,iphone,objective-c,nsdate,nsdateformatter,Iphone,Objective C,Nsdate,Nsdateformatter,我正在尝试从给定字符串获取NSDate: NSString* dateString = @"March 23 04:00 AM"; NSDateFormatter* firstDateFormatter = [[[NSDateFormatter alloc] init] autorelease]; [firstDateFormatter setDateFormat:@"MMММ dd h:mm a"]; NSLocale *locale = [[NSLocale alloc] initWithL

我正在尝试从给定字符串获取NSDate:

NSString* dateString = @"March 23 04:00 AM";
NSDateFormatter* firstDateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[firstDateFormatter setDateFormat:@"MMММ dd h:mm a"];
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[firstDateFormatter setLocale:locale];
NSDate* date = [firstDateFormatter dateFromString:dateString];
NSLog(@"date:%@", date);

如果我犯了错误,我得到的日期为空?

使用
hh
两位数小时:

[firstDateFormatter setDateFormat:@"MMММ dd hh:mm a"];

您设置的日期格式有问题。据苹果公司称

格式字符串使用来自

在您的情况下,您需要使用独立版本的month,即
LLLL
而不是
MMMM
。 如果更改这一行,代码将正常工作

[firstDateFormatter setDateFormat:@"LLLL dd hh:mm a"];
本标准对独立版本的解释如下:

格式和单机版之间最重要的区别 形式是一种语法上的区别,对于需要它的语言来说。对于 例如,许多语言要求月份名称不带 关联日数应为基本提名形式,而月份 带有关联日数的名称应使用其他名称 语法形式:属格、分部等。另一种常见的语法形式 格式和独立格式之间的区别涉及资本化; 但是,这可以单独控制,并且使用 第5.19节所述的元件 ContextTransform元素


顺便说一句,Read它包含很多信息以及初始化dateformatter的更好方法。

我想说,你犯了一个(非常常见的)错误,没有阅读苹果为iOS SDK提供的文档。@NickBull由于MMMM和LLLL之间的差异,这个问题实际上有点棘手,所以我很高兴它发现它在堆栈溢出的地方。伟大的答案,谢谢!您甚至还回答了我的不问问题(例如:什么是独立的:)。您是否愿意回答我为什么得到日期=1970-03-23 01:00:00+0000?不过,当我使用另一个格式化程序将其转换为字符串时,似乎还可以:3月23日凌晨4:00。我的意思是-小时是怎么回事?@Stas,Thx,看到“独立”我很惊讶,所以我认为放一点理由会很好:)它使用你的时区来解析日期,我得到这个:1970-03-23 03:00:00+0000,因为我在gmt+1,你可能在gmt-3。只要用你的时区打印出日期就可以了