提问者:小点点

从API iOS取时间后如何显示实际时钟时间


我已经开始学习Swift和iOS了。为了学习的目的,我用openweathermap API编写了一个天气应用程序。在api响应中,它给出了以Unix UTC时间为单位的时间。我已经在扩展中使用这个函数将时间(Int)转换为字符串-

func fromUnixTimeToTimeNDate() -> String {
    let date = Date(timeIntervalSince1970: TimeInterval(self))
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "MMM d, h:mm:ss a"
    if let retData = dateFormatter.string(for: date) {
        return retData
    }
    return ""
}

所以应用程序中的输出看起来像-

现在我想让这个uilabel滴答作响,显示当前的日期和时间,每秒更新一次。我必须为此使用timer()吗?还是有其他解决方案?


共1个答案

匿名用户

通常,您只需要使用系统时钟和date类的初始化器date()。这将提供当前日期,并使其在更改时更容易更新。您可以创建一个重复的计时器,该计时器每秒触发一次并更新时间显示

如果您想使用API中的当前时间,然后每秒更新该日期,那么您将不得不做一些数学来计算更新的时间。(我不建议每秒都查询API,这会让iOS设备的收音机一直处于满电状态,很快耗尽电池。)

您需要进行一些数学运算,计算自1970年以来API调用的秒数与自1970年以来内部时钟的时间间隔之间的差值,保存该偏移量,并使用它调整调用date()获得的时间。(请参阅date类'initializerinit(TimeIntervalsInceNow:),它可用于获取日期,但要应用调整。