时间支持
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m4s

This commit is contained in:
2026-04-23 14:20:02 +08:00
parent b9fc828567
commit 5442dcbeda

View File

@@ -1,9 +1,12 @@
package main
import (
stdErrors "errors"
"os"
"os/signal"
"reflect"
"strconv"
"strings"
"syscall"
"time"
@@ -197,6 +200,8 @@ func closeQueue(queueClient *queue.Client, appLogger *zap.Logger) {
// createFiberApp 创建 Fiber 应用
func createFiberApp(cfg *config.Config, appLogger *zap.Logger) *fiber.App {
registerTimeParserCompat()
return fiber.New(fiber.Config{
AppName: "君鸿卡管系统 v1.0.0",
StrictRouting: true,
@@ -210,6 +215,60 @@ func createFiberApp(cfg *config.Config, appLogger *zap.Logger) *fiber.App {
})
}
// registerTimeParserCompat 注册时间参数解析兼容器
// 兼容格式RFC3339、2006-01-02、2006-01-02 15:04:05、2006-01-02T15:04:05
func registerTimeParserCompat() {
fiber.SetParserDecoder(fiber.ParserConfig{
IgnoreUnknownKeys: true,
ZeroEmpty: true,
ParserType: []fiber.ParserType{
{
Customtype: time.Time{},
Converter: func(value string) reflect.Value {
parsedTime, err := parseFlexibleTime(value)
if err != nil {
return reflect.Value{}
}
return reflect.ValueOf(parsedTime)
},
},
},
})
}
// parseFlexibleTime 解析多种常见时间格式
func parseFlexibleTime(value string) (time.Time, error) {
trimmed := strings.TrimSpace(value)
if trimmed == "" {
return time.Time{}, nil
}
// 优先支持带时区的标准时间格式。
if parsed, err := time.Parse(time.RFC3339, trimmed); err == nil {
return parsed, nil
}
// 兼容无时区格式,按服务器本地时区解析。
layouts := []string{
"2006-01-02 15:04:05",
"2006-01-02T15:04:05",
"2006-01-02",
}
var parseErr error
for _, layout := range layouts {
if parsed, err := time.ParseInLocation(layout, trimmed, time.Local); err == nil {
return parsed, nil
} else {
parseErr = err
}
}
if parseErr == nil {
parseErr = stdErrors.New("时间格式不支持")
}
return time.Time{}, parseErr
}
// initMiddleware 注册中间件
func initMiddleware(app *fiber.App, cfg *config.Config, appLogger *zap.Logger) {
// 1. Recover - 必须第一个,捕获所有 panic