-4

我有一个格式为“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 对象在这里为空。
提前致谢。

4

2 回答 2

3

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

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

对于您尝试解析的输入,您必须为您的日期格式化程序提供一个格式字符串。如果不这样做,日期格式化程序将使用由日期和时间控制面板中的设置确定的默认值。这些设置不仅因地区而异,而且受用户可能进行的任何更改的影响。另一种说法是它们可能与您尝试转换的日期字符串的格式不匹配

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

您应该查阅一份文档,即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);

在您的努力中向您致以最良好的祝愿。

于 2013-09-10T23:21:31.267 回答
-1

您可以使用NSDateFormatter该类——查看stringFromDatedateFromString方法。

更新:你有几个问题——首先,你需要告诉格式化程序初始格式应该是什么。其次,第二个格式字符串存在格式问题——“m”是分钟,“M”是月。您应该在此处查看文档 这是一个例子:

    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);
于 2013-09-10T17:51:08.457 回答