时间处理
如果使用 znet 并且设置过时区,那么 ztime 也会默认使用 znet 设置的时区。
使用示例
package main
import (
"time"
"github.com/sohaha/zlsgo/ztime"
"github.com/sohaha/zlsgo/zlog"
)
func main(){
// 支持设置时区,如: 东八 ztime.SetTimeZone(8)
// 或 new 一个新对象设置 t := ztime.New(8) t.FormatTime(xxx),那么该对象所有函数都是基于东八时区。
now := time.Now()
// 时间戳转时间格式
timestamp := now.Unix()
zlog.Debug(ztime.FormatTimestamp(timestamp, "Y-m-d H:i:s"))
// 时间对象转时间格式
zlog.Debug(ztime.FormatTime(now, "Y-m-d H:i:s"))
// 字符串转time.Time
zlog.Debug(ztime.Parse("2020-02-04 09:38:19"))
// 星期几
zlog.Debug(ztime.Week(now))
// 更多查看 https://godoc.org/github.com/sohaha/zlsgo/ztime
}
定时任务
小巧能够解析执行大部分日常 crontab 命令。
快速上手
import "github.com/sohaha/zlsgo/ztime/cron"
cronTask := cron.New()
cronTask.Add("*/5 * * * *", func(){
// 每分钟,执行任务
})
// 任务是在协程内执行
cronTask.Run()
// 计算任务下次执行时间
// next, err := cron.ParseNextTime("* * * * * *")
Field name Mandatory? Allowed values Allowed special characters
---------- ---------- -------------- --------------------------
Seconds No 0-59 * / , -
Minutes Yes 0-59 * / , -
Hours Yes 0-23 * / , -
Day of month Yes 1-31 * / , - L W
Month Yes 1-12 or JAN-DEC * / , -
Day of week Yes 0-6 or SUN-SAT * / , - L #
Year No 1970–2099 * / , -
星号(*)
星号表示cron表达式匹配该字段的所有值。例如,在第四个字段(月)中使用星号表示每个月。
斜线(/)
斜线表示范围的增量。例如3-59/15,在分钟字段中,指示小时的第三分钟,此后每15分钟指示一次。
逗号(,)
逗号用于分隔列表中的项目。
连字号(-)
连字符定义范围。例如,2000年至2010年表示公元2000年至2010年之间的每一年(包括该年)。
大号(L)
L代表“最后”。在“星期几”字段中使用时,它允许您指定诸如5L给定月份的“最后一个星期五”之类的结构。
哈希(#)
#允许在“星期几”字段中输入,并且后面必须跟一个1到5之间的数字。它允许您指定结构,例如给定月份的“第二个星期五”。
如果仅存在六个字段,0则在前面加上第二个字段,即* * * * * 2013内部变为0 * * * * * 2013。
如果仅存在五个字段,则在0第二个字段前添加一个通配符年份字段,即在* * * * Mon内部变为0 * * * * Mon *。
星期几字段的域是[0-7]而不是[0-6],其中7是星期日(如0)。