为啥 FileManager.default.attributesOfItem 在 NSFileCreationDate 中返回当前日期?

Posted

技术标签:

【中文标题】为啥 FileManager.default.attributesOfItem 在 NSFileCreationDate 中返回当前日期?【英文标题】:Why FileManager.default.attributesOfItem returning current date in NSFileCreationDate?为什么 FileManager.default.attributesOfItem 在 NSFileCreationDate 中返回当前日期? 【发布时间】:2020-02-07 08:47:22 【问题描述】:

虽然我已经检查了有关如何获取创建日期的其他答案,但这对我来说似乎并不奏效。

这就是我提取创建日期的方式。

class func extractFileCreatedDate(filepath: String) -> String

    var dateString = ""
    do

        let aFileAttributes = try FileManager.default.attributesOfItem(atPath: filepath) as [FileAttributeKey:Any]
        let theCreationDate = aFileAttributes[FileAttributeKey.creationDate] as? Date ?? Date()

        let formatter: DateFormatter = DateFormatter()
        formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") as Locale?
        formatter.timeZone = TimeZone.init(abbreviation: "GMT")
        formatter.dateFormat = "MM/dd/yyyy HH:mm:ss"

        //MARK:- Share App Submit Date
        if let readDate:String = formatter.string(from: theCreationDate)
            dateString = readDate
        

     catch let theError as Error
        print("file not found \(theError)")
    

    return dateString

所以我通过打印得到的响应是:

如果我在本地存储中检查此文件的创建日期不同:

在调试中,我得到的是当前日期而不是创建日期:

如果我做错了什么,请建议我。我期待的是它应该返回相同的创建日期。或者我可能遗漏了什么,请帮帮我。

谢谢!

【问题讨论】:

我运行了您的代码,它在我的测试中返回了正确的创建日期。 – 只有调试器输出错误,还是返回值也错误?并且(很抱歉问这个显而易见的问题)您是否三次检查它是否是正确的文件? 是的,我总是弄错日期。应该可以的,不知道怎么回事。我只有一个本地文件,并一次又一次地检查它。即使我也很确定,它会返回正确的创建日期。但它没有。请参考截图,编辑问题。 @RenukaPandey 为什么要更改区域设置和时区,有什么原因吗?尝试仅使用格式 @guru:使用locale是要求的一部分,但在应用格式和locale之前,创建日期仍然是当前日期,您可以参考附件截图。 【参考方案1】:

creationDate 将始终从我们的应用程序返回文件的创建日期,而不是物理存储 (Mac) 的创建日期。

为了测试这个:

1:将文件添加到您的包(在过去的日期创建)并测试您的代码,它将返回当前日期(与您现在得到的相同)。

2:删除App 手动将iPhone的日期更改为过去的任何日期For Ex.01-01-2019并运行App,可以看到创建日期为01- 01-2019.

3:再次将日期更改为今天的日期并测试,可以看到结果仍然是01-01-2019,因为创建日期是过去的日期 .

希望对你有帮助!!!

【讨论】:

以上是关于为啥 FileManager.default.attributesOfItem 在 NSFileCreationDate 中返回当前日期?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?

为啥需要softmax函数?为啥不简单归一化?

为啥 g++ 需要 libstdc++.a?为啥不是默认值?

为啥或为啥不在 C++ 中使用 memset? [关闭]

为啥临时变量需要更改数组元素以及为啥需要在最后取消设置?

为啥 CAP 定理中的 RDBMS 分区不能容忍,为啥它可用?