有时候开发需要使用系统日期和时间,以下就是几种可以调用系统时间的办法。
如果只是单纯需要显示时间,不需要处理时间信息,那么可以很简单的使用以下代码:
Text("\(Date())")
这时候会显示非常详细的时间:
如果只是需要显示其中一部分的话可以使用以下方法:
Text(Date(), style: .date)
这时候显示如下:
这里的.date
还可以改成.time
来显示具体时间。当然还有timer(计时器)等组件,可以自己看看哦。
如果需要显示当前时区可以使用:
Text("\(NSTimeZone.system.description)")
当需要更详细或者特定的的时间信息时,使用以下方法:
获取非常非常详细的信息的话可以使用以下代码:
var currentDate = Calendar.current.dateComponents(in: TimeZone.current, from: Date())
先来解释一下最后括号里的内容:
首先in:
后面跟的是时区,这里的.current
表示使用设备当前使用的时区。from:
说明从哪获得时间,这里表示使用的是当前时间。
如果这时候调用该变量会发现显示的非常复杂:
里面包含了非常非常多的信息,但是一般没人会这么使用,就需要处理一下格式。
所以当需要其他格式的时间,还有需要处理时间信息的时候,使用以下方法更好一些,就是有点复杂:
由于SwiftUI作用域的原因,swift常用的调整显示时间格式方法不能直接使用,常用的方法如下:
let formatter = DateFormatter()
//调整日期格式,一共五个选项——完整和长中短无
formatter.dateStyle = .short
//调整时间格式,同上
formatter.timeStyle = .medium
let datetime = formatter.string(from: Date())
这里不能直接复制到swiftUI中,而且,如果定义了多个方法,就算定义域没有冲突也会报错。这里使用extension扩展以下:
extension Date {
func formatDate() -> String {
let formatter = DateFormatter()
formatter.dateStyle = .short
formatter.timeStyle = .medium
let nowdate = formatter.string(from: Date())
return nowdate
}
}
这时候使用代码:
Text("\(Date().formatDate())")
就可以看到我们设计好格式的。
或者还可以这样:
//日期格式
private let Formatter: DateFormatter = {
let formatter = DateFormatter()
formatter.dateStyle = .short
formatter.timeStyle = .medium
return formatter
}()
Text("\(Date(), formatter: Formatter)")
如果想很精确地修改日期时间格式,使用以下方式,推荐这种哦:
func currentDate() -> String {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd' 'HH:mm:ss"
let datetime = formatter.string(from: Date())
return datetime
}
这里的“HH”表示24小时制,“hh”表示12小时制。
这时候返回的日期时间格式就按照我们设计好的yyyy-MM-dd' 'HH:mm:ss
样式输出。需要注意的是:中间两个单引号之间有一个空格,这样输出的日期中间就是空开的,不会有其他东西。如果没有空格,两个单引号紧挨着,输出的格式会有一个单引号在中间。
可能会需要农历日期,Apple提供了方法,使用以下代码获取当前农历日期:
func lunarDate() -> String {
let formatter = DateFormatter()
formatter.dateStyle = .full
formatter.timeStyle = .none
formatter.locale = Locale(identifier: "zh_CN")
formatter.calendar = Calendar.init(identifier: .chinese)
let nowLunarDate = formatter.string(from: Date())
return nowLunarDate
}
这里说明一下代码。formatter.locale = Locale(identifier: "zh_CN")
说明使用中文显示日期(不包括公历年份和时间,例如“2021辛丑年四月初八星期三”这样的格式),不设置的话会用英文显示。formatter.calendar = Calendar.init(identifier: .chinese)
表示使用中国的日历,也就是农历。formatter.dateStyle = .full
也会影响农历显示格式。建议使用.long
。