文章

在小组件中显示动态日期

即使你的小组件没有运行,在小组件中也会显示基于时间的最新信息。

概览

因为小组件扩展不会一直运行,所以你无法直接更新小组件的内容。WidgetKit 会代你渲染小组件的视图并显示结果。但那些在小组件显示时继续更新的内容,也可以借助某些 SwiftUI 视图来呈现。

使用小组件中的文本 视图,可以在屏幕上显示最新的日期和时间。下面的示例显示了可用的组合。

要显示自动更新的相对时间:


let components = DateComponents(minute: 11, second: 14)
let futureDate = Calendar.current.date(byAdding: components, to: Date())!


Text(futureDate, style: .relative)
// Displays:
// 11 min, 14 sec


Text(futureDate, style: .offset)
// Displays:
// -11 minutes

使用相对 样式显示当前日期和时间与指定日期之间的绝对差异,无论日期是在未来还是过去。偏移 样式显示当前日期和时间与指定日期之间的差异,用减号 (-) 前缀表示未来的日期,用加号 (+) 前缀表示过去的日期。

要显示持续自动更新的计时器:


let components = DateComponents(minute: 15)
let futureDate = Calendar.current.date(byAdding: components, to: Date())!


Text(futureDate, style: .timer)
// Displays:
// 15:00

对于未来的日期,计时器 样式会进行倒计时,直到当前时间达到指定的日期和时间,对于过去的日期则进行正计时。

要显示绝对日期或时间:


// Absolute Date or Time
let components = DateComponents(year: 2020, month: 4, day: 1, hour: 9, minute: 41)
let aprilFirstDate = Calendar.current(components)!


Text(aprilFirstDate, style: .date)
Text("Date: \(aprilFirstDate, style: .date)")
Text("Time: \(aprilFirstDate, style: .time)")


// Displays:
// April 1, 2020
// Date: April 1, 2020
// Time: 9:41AM

最后,要显示两个日期之间的时间间隔:


let startComponents = DateComponents(hour: 9, minute: 30)
let startDate = Calendar.current.date(from: startComponents)!


let endComponents = DateComponents(hour: 14, minute: 45)
let endDate = Calendar.current.date(from: endComponents)!


Text(startDate ... endDate)
Text("The meeting will take place: \(startDate ... endDate)")


// Displays:
// 9:30AM-2:45PM
// The meeting will take place: 9:30AM-2:45PM