为啥 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,为啥它受到保护?