Swift 3 Playground 以本地格式记录日期。如何?

Posted

技术标签:

【中文标题】Swift 3 Playground 以本地格式记录日期。如何?【英文标题】:Swift 3 playground logs dates in local format. How? 【发布时间】:2016-09-27 00:22:54 【问题描述】:

如果您在美国的 Playground 中运行这样的线路:

let today = Date()

您将在源代码右侧看到如下输出:

"Sep 26, 2016, 8:17 PM"

这似乎是日期,以当地时区显示,使用中等日期和时间样式。

它是如何工作的?

如果您尝试打印日期:

print("today = \(today)"

您会看到“Today = 2016-09-27 00:18:55 +0000\n”,这是 UTC,并且似乎是 unix 日期格式。

当您第一次创建日期时,Playground 使用什么函数来显示日期?有没有办法从代码或调试控制台获取该输出格式?

到目前为止,我已经创建了一个日期格式化程序,用于记录日期、在控制台中显示日期等。

【问题讨论】:

您可以继承并覆盖与CustomPlaygroundQuicklookable的一致性 这不是我要问的。我希望能够在代码中使用print(aDate),或在调试器控制台中使用e aDate,并在我当前的时区和语言环境中获取中等格式的日期。 我已经为 Date 创建了一个扩展,可以让我说 print(aDate.localDateString),但显然,在用户的语言环境中以中等格式显示日期的能力潜伏在某个地方。也许它只是在操场上? 【参考方案1】:

它潜伏在CustomPlaygroundQuickLookable 协议中,Date 符合:

if case .text(let str) = today.customPlaygroundQuickLook 
    print(str)

【讨论】:

呃。我希望日期的正常描述方法能够登录本地时区和语言环境,并可以选择以 UTC 显示。 我在 SO 上看到的大多数 Date 问题都与时区有关。我希望苹果也做出改变 希望能够在本地时区记录日期是很常见的。更常见的是想在 UTC 中看到它,我敢打赌。不幸的是,以易于阅读的格式记录日期需要隐藏的 Playground 协议。 那个。并且下标 String 需要 Index 而不是 Int。 Swift 团队有时候就这么固执 我理解的下标字符串。 Unicode 字符串是奇怪的野兽,需要可变数量的数据来表达,并且有多种方式来表示同一组字形。我希望他们能提供一个“普通”映射,将每个字形强制转换为 32 位 int,然后允许将其视为纯 unicode 字符数组。

以上是关于Swift 3 Playground 以本地格式记录日期。如何?的主要内容,如果未能解决你的问题,请参考以下文章

如何将本地 HTML 文件导入到我的 Swift Playground Live View?

NSDate() - Playground 与 Swift Xcode

在 Playground 的“SupportCode.swift”中导入第 3 方框架

解析 JSON 数据时出错(Swift 4 Playground)

swift Playground上的Swift 3.0 HTTP基本身份验证

如何使用 ipad Playground 在 swiftUI 上运行 Scene 和 App 以实现 swift