写作字符串日期

问题描述:

我试图从给定的字符串获得的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); 

我得到的日期是空在那里我已经犯了一个错误?

+1

我想说你已经犯了一个(非常常见的)错误,那就是没有阅读苹果公司为iOS SDK提供的文档。 – 2012-03-23 11:30:19

+0

@NickBull由于MMMM和LLLL不同,这个问题实际上有点棘手,所以我很高兴它发现堆栈溢出。 – 2012-03-23 13:14:47

没有与您设定的日期格式的问题。据苹果

格式字符串使用从Unicode Technical Standard #35

格式模式你的情况,你需要使用一个月就是LLLLMMMM的单机版。 如果更改这一行,你的代码会工作得很好

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

该标准指出,独立版本如下:

最重要的区别格式和独立 形式之间进行语法上的区别,适用于需要它的语言。对于 示例,许多语言要求没有关联的日期编号的月份名称采用基本主格形式,而具有关联日期编号的月份名称应该采用不同的 语法形式:属格,部分等。另一种格式与单机的区别涉及大写字母的常见类型 ;然而,这可以单独地并且更精确地使用 元件来控制,如第5.19节中所描述的 上下文转换元素。

Btw。阅读this它包含大量的信息以及初始化dateformatter的更好方法。

+0

很好的答案,谢谢!你甚至回答我没有问的问题(什么是独立的例子:)) – Stas 2012-03-23 14:48:09

+0

你会如此友好地回答我为什么得到日期= 1970-03-23 01:00:00 +0000虽然当我将其转换为字符串使用另一格式化程序它似乎是好的: 3月23日上午4点。我的意思是 - 几个小时发生了什么? – Stas 2012-03-23 14:52:32

+0

@Stas,Thx,我很惊讶看到“独立”,所以我虽然说,把一些理由将是好的:) – 2012-03-23 14:59:21

使用hh了两位数小时:

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