NSDateFormatter setDateFormat 没有正确返回值

NSDateFormatter setDateFormat is not returning value correctly

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

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

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

好吧,UIDatePicker 有一个 属性 命名日期,您可以直接从中获取选定的 NSDate 值。

NSDate *selectedDate = datePicker.date;

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

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

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

任何时候您使用 NSLog(或调试器 "po" 或 "expression" 命令)记录 NSDate,您将看到日期作为 UTF 格式的字符串,如您所示。

如果希望输出为字符串,需要使用日期格式器stringFromDate将日期转换为字符串

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

到另一个字符串

您可以按照上述@RyanR 得到正确的结果。

如果你仍然喜欢字符串作为输入,你需要告诉你的formatter输入的格式,然后先将字符串转换为 NSDate

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 值后,您可以将其转换为您喜欢的任何格式。在你的情况下,如果你想要 MM/dd/yyyy,那么:

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

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

关于日期格式,你可以看看this link