0

我有以下方法,我想用它来返回修改后的日期:

- (NSDate *)getCreationDate:(NSFileManager *)fileManager atPath:(NSString *)path {
    NSError *error;
    NSDate *date;
    NSDictionary *fileAttributes = [fileManager attributesOfItemAtPath:path error:&error];

    // Get creation date.
    if (!error) {
        if (fileAttributes != nil) {
            NSDate *creationDate = [fileAttributes fileCreationDate];
            NSString *dateString = [creationDate description];
            NSLog(@"Unformatted Date Created: %@", dateString);

            // Format date.
            NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
            [dateFormatter setDateFormat:@"dd-MM-yyyy hh:mm:ss"];
            date = [[NSDate alloc] init];
            date = [dateFormatter dateFromString:dateString];
            NSLog(@"Formatted Date Created: %@", [date description]);
        } else {
            NSLog(@"File attributes not found.");
        }
    } else {
        NSLog(@"%@", [error localizedDescription]);
    }

    return date;
}

问题是格式化的日期返回为空。

输出:

创建日期:2013-02-06 04:44:57 +0000

创建格式化日期:(空)

4

2 回答 2

3

没有格式化的 NSDate 这样的东西。这只是一个没有格式的日期。描述方法用于调试和记录,并使用它想要的任何格式。

NSDateFormatter 用于创建具有您指定格式的 NSDate 的 NSString 表示。你的方法可以用这个代替,做同样的事情。

- (NSDate *)getCreationDate:(NSFileManager *)fileManager atPath:(NSString *)path {
    NSError *error;
    NSDictionary *fileAttributes = [fileManager attributesOfItemAtPath:path error:&error];

    // Get creation date.
    if (!error) {
        if (fileAttributes != nil) {
            return [fileAttributes fileCreationDate];
       } else {
            NSLog(@"File attributes not found.");
        }
    } else {
        NSLog(@"%@", [error localizedDescription]);
    }

    return nil;
}

当您要显示日期时,请对其进行格式化。使用 NSDateFormatter 将其转换为格式化的 NSString。

此外,线条

    date = [[NSDate alloc] init];
    date = [dateFormatter dateFromString:dateString];

创建一个新日期,然后将其丢弃。第一行是不必要的。

于 2013-02-07T01:04:45.173 回答
0

您没有将时区合并到时间格式中,并且小时的格式是错误的。它应该是

yyyy-MM-dd HH:mm:ss ZZZZ
于 2013-02-07T00:50:54.460 回答