【问题标题】:How to get day from JSON DarkSky swift如何从 JSON DarkSky swift 获取一天
【发布时间】:2017-08-04 13:32:46
【问题描述】:

我想在我的天气应用程序中进行每周预测(周日: ,周一: 等...)所以我正在使用 DarkSky 进行此操作,但我注意到了一些奇怪的事情。

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

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

【问题讨论】:

    标签: ios iphone json swift nsdate


    【解决方案1】:

    提供的答案的另一种选择是使用 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 属性是一种使用文化和语言环境适当的可见日期来呈现的更好方法。

    【讨论】:

      【解决方案2】:

      该值表示一个 UNIX 时间戳(自 1970 年 1 月 1 日以来的秒数),您可以使用以下命令创建日期:

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

      【讨论】:

        【解决方案3】:

        先把字符串变成Date格式(来自vadian's answer):

        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 返回一个与星期几的索引相对应的整数(本地化)。

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

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

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

        【讨论】:

          猜你喜欢
          • 2017-06-07
          • 1970-01-01
          • 2016-01-22
          • 2018-12-11
          • 1970-01-01
          • 1970-01-01
          • 2020-04-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多