具有月份名称的日期,年份为objective-c

时间:2013-09-10 17:45:53

标签: objective-c nsdate

我的日期字符串格式为“2013年9月10日”。如何将此表示转换为“yyyy / mm / dd”等格式。

   NSString *strDate = @"September 10, 2013";
   NSDateFormatter *df = [[NSDateFormatter alloc] init];
   [df dateFromString:strDate];
   NSDate *date = [df dateFromString:strDate];
   [df setDateFormat:@"yyyy/mm/dd"];
    NSString* temp = [[NSString alloc] init];
   temp = [df stringFromDate:date];
   NSLog(@"date i required %@", temp);


temp对象在这里为空。
提前致谢。

2 个答案:

答案 0 :(得分:3)

让我们重新编写原始代码,并讨论它:

NSString *strDate = @"September 10, 2013";
NSDateFormatter *df = [[NSDateFormatter alloc] init];

对于您尝试解析的输入,您必须为日期格式化程序提供格式字符串。如果不这样做,日期格式化程序将使用由日期和时间设置决定的默认值。时间控制面板。这些设置不仅从区域设置到区域设置不同,它们还受用户可能产生的任何更改的影响。放置它的另一种方法是它们可能与您尝试转换的日期字符串的格式不匹配

您也不希望依赖预定义的样式,例如NSDateFormatterShortStyleNSDateFormatterMediumStyleNSDateFormatterLongStyle。它们用于日期显示(如果您愿意接受日期和时间控制面板设置),而不是用于解析。

你应该咨询一份文件,Unicode Technical Standard #35。查看标有“日期字段符号表”的表格。根据那里提供的信息(以及您的输入),您需要设置日期转换器以使用如下格式字符串进行解析:

[df setDateFormat:@"MMMM dd, yyyy"];

现在您可以使用日期格式化程序来解析日期字符串,它将起作用:

NSDate *date = [df dateFromString:strDate];

从这一点开始,你看起来很不错(尽管我已经删除了所有这些中多余的一两行):

[df setDateFormat:@"yyyy/MM/dd"];
NSString *temp = [df stringFromDate:date];
NSLog(@"date i required %@", temp);

祝你工作顺利。

答案 1 :(得分:-1)

您可以使用NSDateFormatter课程 - 查看stringFromDatedateFromString方法。

更新:您有几个问题 - 首先,您需要告诉格式化程序初始格式应该是什么。其次,第二种格式字符串存在格式问题 - ' m'是分钟,' M'是几个月。您应该查看文档here.以下是一个示例:

    NSString *strDate = @"September 10, 2013";
    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    [df setDateStyle:NSDateFormatterLongStyle];
    [df dateFromString:strDate];
    NSDate *dat = [df dateFromString:strDate];
    [df setDateFormat:@"yyyy/MM/dd"];
    NSString* t = [df stringFromDate:dat];
    NSLog(@"date i required %@", t);