SwiftUI——获取日期时间(含农历)及处理时间格式的方法

有时候开发需要使用系统日期和时间,以下就是几种可以调用系统时间的办法。

如果只是单纯需要显示时间,不需要处理时间信息,那么可以很简单的使用以下代码:

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

这里显示的数字如果想去掉的话,可以使用字符串截取,参考我写的相关文章:https://blog.csdn.net/qq_33919450/article/details/117310771

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值