package utils import ( "fmt" "time" _ "time/tzdata" // 挂载时区数据库 否则docker报错 ) var sysLoc *time.Location func loc() *time.Location { if sysLoc == nil { var err error sysLoc, err = time.LoadLocation("Asia/Shanghai") // 设置系统为东八区 -- 具体根据项目更改 if err != nil { panic(err) } } return sysLoc } const MonthDateTimeFormatLayout = "01-02 15:04:05" const DateTimeFormatLayout = "2006-01-02 15:04:05" const MonthFormatLayout = "2006-01" func Time() time.Time { return time.Now().In(loc()) } func SecondsUntilSecond(targetDate string) (int64, error) { // 解析目标日期(注意时区处理) targetTime, err := time.ParseInLocation(DateTimeFormatLayout, targetDate, loc()) if err != nil { return 0, fmt.Errorf("invalid date format, expected YYYY-MM-DD: %v", err) } // 计算时间差 now := time.Now() duration := targetTime.Sub(now) // 返回总秒数(忽略纳秒部分) return int64(duration.Seconds()), nil } // 计算目标时间距离当前的剩余秒数 func SecondsUntil(targetDate string) (int64, error) { // 解析目标日期(注意时区处理) targetTime, err := time.ParseInLocation("2006-01-02", targetDate, loc()) if err != nil { return 0, fmt.Errorf("invalid date format, expected YYYY-MM-DD: %v", err) } // 计算时间差 now := time.Now() duration := targetTime.Sub(now) // 返回总秒数(忽略纳秒部分) return int64(duration.Seconds()), nil } func NextDate(dateStr string) (string, error) { dateTime, err := ParseDateInLocation(dateStr) if err != nil { return "2006-01-02", err } return dateTime.AddDate(0, 0, 1).Format(DateFormatLayout), nil } func TimeMonth() string { return Time().Format(MonthFormatLayout) } func NowDateTimeSec() string { return Time().Format(DateTimeFormatLayout) } func ParseDateCheck(dateStr string) (string, error) { _, err := time.Parse("2006-01-02", dateStr) if err != nil { return dateStr, fmt.Errorf("日期解析错误:%s", err) } return dateStr, nil } func ParseTimeStamp(timestamp int64) time.Time { return time.Unix(timestamp, 0).In(loc()) } func NowTimeSecStr() string { return time.Now().Format(DateTimeFormatLayout) } func ParseTimeStampToDateTimeStr(timestamp int64) string { return ParseTimeStamp(timestamp).Format(DateTimeFormatLayout) } func ParseStampToMonthDateStr(timestamp int64) string { return ParseTimeStamp(timestamp).Format(MonthDateTimeFormatLayout) } func ParseTimeStampToDateStr(timestamp int64) string { return ParseTimeStamp(timestamp).Format(DateFormatLayout) } func TimeStamp() int64 { return Time().Unix() }