【问题标题】:Swift 3 playground logs dates in local format. How?Swift 3 Playground 以本地格式记录日期。如何?
【发布时间】: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),但显然,在用户的语言环境中以中等格式显示日期的能力潜伏在某个地方。也许它只是在操场上?

标签: nsdateformatter swift3 swift-playground


【解决方案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 字符数组。
猜你喜欢
  • 1970-01-01
  • 2017-05-25
  • 2011-04-22
  • 2017-08-16
  • 2017-11-22
  • 1970-01-01
  • 2019-09-16
  • 2019-08-04
  • 1970-01-01
相关资源
最近更新 更多