如何从 JSON DarkSky swift 获取一天

How to get day from JSON DarkSky swift

我想在我的天气应用程序中进行每周预报(星期日: 、星期一: 等...)所以我正在使用 DarkSky 进行预报,但我发现有些奇怪。

"daily": {
"summary": "Light rain throughout the week, with temperatures bottoming out at 48°F on Sunday.",
"icon": "rain",
"data": [
  {
   -> "time": 1453363200, <-

没有显示日期名称的值,只有这个 属性 名为 'time'。我假设它代表秒,但我不确定如何获得请求的日期。比如我如何从中确定具体的一天?

该值表示 UNIX 时间戳(自 1/1/1970 以来的秒数),您可以使用以下方式创建日期:

let date = Date(timeIntervalSince1970: 1453363200) // January 21, 2016 9:00 am

首先把字符串变成Date格式(来自):

let date = Date(timeIntervalSince1970: 1453363200)

然后你可以使用Calendar提取日期组件:

let components = Calendar.current.dateComponents([.weekday], from: date)
let weekday = components.weekday

dateComponents 的第一个参数采用 Calendar.Component enum 中的元素数组。

例如,如果您想要小时、分钟、秒和工作日,您可以这样做:

let components = Calendar.current.dateComponents([.hour, .minute, .second, .weekday], from: date)

let hour = components.hour
let minute = components.minute
let second = components.second
let weekday = components.weekday
// ...etc

更新

注意 .weekday returns 一个与星期几索引对应的整数(本地化)。

如果您想要当天的实际名称(例如星期一、星期二等),您需要访问 CalendarweekdaySymbols 属性(这也是本地化的) .

let weekdayName = Calendar.current.weekdaySymbols[weekday ?? 0]

(weekday 是可选的,所以我使用了默认值 0)

提供的答案的另一种选择是使用 DateFormatter,它也将负责本地化,并且不需要放入 DateComponents。

这是从游乐场拍摄的

let date = Date(timeIntervalSince1970: 1453363200) // -> "Jan 21, 2016, 8:00 AM"
let formatter = DateFormatter()

formatter.dateFormat = "EEEE"

let day = formatter.string(from: date) // -> "Thursday"

如果您想查看还有哪些其他 dateFormat 字符串,您可以在 http://nsdateformatter.com.

上查看非常方便的参考资料

总的来说,尽管您希望避免对日期格式进行硬编码以呈现除像这样的简单输出之外的任何内容。在这种情况下,设置日期格式化程序的 dateStyletimeStyle 属性是一种使用符合文化和语言环境的可见日期进行呈现的更好方式。