NSString转换为NSDate ..有更好的方法吗?

时间:2014-10-12 06:09:48

标签: nsstring nsdate nsdateformatter

我需要转换格式为#34的NSString对象; 10月14日星期二和#34;到NSDate,格式"星期二,10月14日"。这就是我试过的,

NSString *day = @"Tuesday 14th October";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
[dateFormatter setLocale:[NSLocale currentLocale]];
[dateFormatter setDateFormat:@"EEEE, dd MMM"];

NSArray *dateComponets = [day componentsSeparatedByString:@" "]; 
NSString *dayOfTheWeek = dateComponets[0];
NSString *date = [dateComponets[1] substringToIndex:2];
NSString *month = [dateComponets[2] substringToIndex:3];
NSString *newDay = [NSString stringWithFormat:@"%@, %@ %@", dayOfTheWeek,date, month];
NSDate *newDate = [dateFormatter dateFromString:newDay];
NSLog(@"date : %@", [dateFormatter stringFromDate:newDate]);

它似乎有效,但我觉得它有点笨拙......你们知道更优雅/更好/标准的方式在iOS中这样做吗?

2 个答案:

答案 0 :(得分:0)

没有" NSDate of firmat X&#34 ;;你从根本上没有理解NSDate。这是一个时间戳。它及时确定了一个客观的目标。它没有格式。

只需使用NSDateFormatter即可实现您想要做的任何事情。它可以将字符串解析为日期,反之亦然。不要编写自己的hacky文本解析。不要碰NSDateComponents

答案 1 :(得分:0)

将NSDate存储在核心数据中 - 所以:

NSString *day = @"Tuesday 14th October";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"EEEE dd MMM"];
myCoreDataObject.savedDate = [dateformatter dateFromString: day];

如果要显示它,请执行相反操作:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"EEEE, dd MMM"];
myLabel.text = [dateformatter stringFromDate: myCoreDataObject.savedDate];
  • 每次都不要实际分配新的数据格式化程序,它真的很慢。
  • 区域设置将默认为系统区域,因此您无需明确设置它