2012-09-14 72 views
11

我有一个字符串“2012-09-16 23:59:59 JST” 我想将此日期字符串转换为NSDate。从字符串NSDate

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd hh:mm:ss Z"]; 
NSDate *capturedStartDate = [dateFormatter dateFromString: @"2012-09-16 23:59:59 JST"]; 
NSLog(@"%@", capturedStartDate); 

但它不工作。它给予null值。请帮助..

回答

31

当使用24小时时间,小时符必须是这样一个大写的H:

[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"]; 

检查这里的正确说明符:http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns

但是,你需要设置区域设置的日期格式:

// Set the locale as needed in the formatter (this example uses Japanese) 
[dateFormat setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"ja_JP"]]; 

全部工作代码:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss zzz"]; 
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"ja_JP"]]; 
NSDate *capturedStartDate = [dateFormatter dateFromString: @"2012-09-16 23:59:59 JST"]; 
NSLog(@"Captured Date %@", [capturedStartDate description]); 

输出(GMT):

Captured Date 2012-09-16 14:59:59 +0000 
+0

哎@danielbeard,如u表示,将显示时间GMT,这将显示出从确切日期为9小时的时间差。如何从字符串中获取确切的日期.. ?? – NiKKi

+0

日期本身没有时区,但是您可以在上面设置的NSDateFormatter中使用带有'stringFromDate'的时区获取字符串表示。 – danielbeard

+0

查看此处了解更多详情http://stackoverflow.com/questions/1862905/nsdate-convert-date-to-gmt – danielbeard

1
NSString *dateString = @"01-02-2010"; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 

// this is imporant - we set our input date format to match our input string 
// if format doesn't match you'll get nil from your string, so be careful 

[dateFormatter setDateFormat:@"dd-MM-yyyy"]; 
NSDate *dateFromString = [[NSDate alloc] init]; 
// end 
dateFromString = [dateFormatter dateFromString:dateString]; 
[dateFormatter release]; 
6
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"]; 
NSDate *capturedStartDate = [dateFormatter dateFromString: @"2012-09-16 23:59:59 GMT-08:00"]; 
NSLog(@"%@", capturedStartDate); 
+1

这可能对某人某一天有用:Keen.io时间戳格式 '[formatter setDateFormat:@“yyyy -MM-dd'T'HH:mm:ss.SSS'Z'“];'我不需要设置语言环境。 –

+0

答案今天对我有用;) –