NSDate的字符串描述

Ily*_*ski 19 cocoa objective-c nsdate

我有以下代码:

[ [NSDate date] descriptionWithLocale: @"yyyy-MM-dd" ]
Run Code Online (Sandbox Code Playgroud)

我希望它以下列格式返回日期:"2009-04-23"

但它返回:2009年4月23日星期四下午11:27:03 GMT + 03:00

我究竟做错了什么?

先感谢您.

sit*_*uee 91

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSString *dateString = [dateFormatter stringFromDate:[NSDate date]];
[dateFormatter release];  // delete this line if your project uses ARC
NSLog(@"%@",dateString); 
Run Code Online (Sandbox Code Playgroud)

  • 出于区域设置原因,您不应显式设置日期和时间格式.相反,使用区域设置友好的样式:`[dateFormatter setDateStyle:NSDateFormatterMediumStyle]; [dateFormatter setTimeStyle:NSDateFormatterMediumStyle];` (8认同)

Seb*_*lis 32

你使用的是错误的方法.而是试试descriptionWithCalendarFormat:timeZone:locale:

[[NSDate date] descriptionWithCalendarFormat:@"%Y-%m-%d"
                                    timezone:nil
                                      locale:nil];
Run Code Online (Sandbox Code Playgroud)

另请注意,该方法的格式与您问题中的格式不同.完整的文档可以在这里找到.

编辑:虽然迈克指出,你真的应该使用NSDateFormatter.descriptionWithCalendarFormat:timezone:locale:苹果在文档中提到了一些问题.

  • @NicHubbard:此方法既不被弃用也不被折旧.至少从10.6(当前版本的Mac OS X)开始. (4认同)
  • 但它似乎确实适用于iOS.时间冗长并使用NSDateFormatter. (4认同)

Mik*_*lah 10

另请注意,对于大多数情况,NSDateFormatter优先考虑其灵活性.

在许多应用程序中重复使用日期格式化程序也可以获得显着的性能优势.