NSDateFormatter setDateFormat未正确返回值

时间:2016-01-12 01:21:30

标签: ios objective-c nsdateformatter

在我的应用中,我有以下代码:

if ([fieldValue isKindOfClass:[NSString class]]) {
                NSDateFormatter *formatter = [NSDateFormatter new];
                [formatter setDateFormat:@"MM/dd/yyyy"];
                resultValue = [formatter dateFromString:fieldValue];
            }

fieldValue是从datePicker设置的,假设我得到的值是"2016-03-12 01:13:36 +0000"

在我的代码中,我初始化了新的NSDateFormatter并调用了setDateFormat函数,以“MM / dd / yyyy”的形式设置resultValue。例如,2016年1月13日。

但是,我为resultValue获得的值也是2016-03-12 01:13:36 +0000

我不确定为什么这个格式化程序无法正常工作。

3 个答案:

答案 0 :(得分:0)

嗯,UIDatePicker有一个名为date的属性,您可以直接获取所选的NSDate值。

NSDate *selectedDate = datePicker.date;

您的代码示例使用字符串作为源值,这在您提供的详细信息的上下文中没有意义。你确定你没有尝试将NSDate对象格式化为'MM / dd / yyyy'吗?目前还不清楚你想要完成什么,但如果是这种情况,你会想要调用-stringFromDate:并将其传递给你的NSDate实例,如下所示:

NSString *formattedDateString = [formatter stringFromDate:datePicker.date];

答案 1 :(得分:0)

您正在调用dateFromString。这需要STRING指定格式的日期并将其转换为NSDate(对象)NSDate对象没有内部格式。这是一个时刻,在内部记录为UTF时间。

每次使用NSLog(或调试器“po”或“expression”命令)登录NSDate时,您都会看到日期为UTF格式的字符串,如图所示。

如果您希望输出为字符串,则需要使用日期格式化程序stringFromDate将日期转换为字符串

如果要将一种格式的日期字符串转换为另一种格式,则必须使用一种日期格式化程序的NSDate方法将日期字符串转换为dateFromString,然后将生成的日期转换为另一种格式字符串使用不同的日期格式化程序的stringFromDate方法

答案 2 :(得分:0)

你可以像上面描述的@RyanR那样得到正确的结果。

如果你仍然喜欢字符串作为输入,你需要告诉你的let string = "2016-03-12 01:13:36 +0000" let formatter = NSDateFormatter() formatter.dateFormat = "yyyy-MM-dd hh:mm:ss +zzzz" let date = formatter.dateFromString(string) 输入的格式,然后首先将字符串转换为NSDate

formatter.dateFormat = "MM/dd/yyyy"
let resultValue = formatter.stringFromDate(date!)

获得NSDate值后,您可以将其转换为您喜欢的任何格式。在你的情况下,如果你想拥有MM / dd / yyyy,那么:

{{1}}

上面的代码完全符合您的预期

关于日期格式模式,您可以查看this link