浏览代码

批量插入fix bug

marion 5 年之前
父节点
当前提交
e5350f0d8f
共有 3 个文件被更改,包括 36 次插入3 次删除
  1. 1 1
      utils/date/date.go
  2. 34 1
      utils/date/datetime.go
  3. 1 1
      utils/date/time.go

+ 1 - 1
utils/date/date.go

@@ -58,7 +58,7 @@ func (t Date) FromString(str string) Date {
 }
 
 func ParseDate(str string) Date {
-	str = strings.TrimSpace(str)
+	str = dateStrFormat(str)
 	tm, err := time.Parse(NormalDateFormat, str)
 	if nil != err {
 		return Unix(0, 0).ToDate()

+ 34 - 1
utils/date/datetime.go

@@ -3,6 +3,7 @@ package date
 import (
 	"database/sql/driver"
 	"errors"
+	"regexp"
 	"strings"
 	"time"
 )
@@ -11,6 +12,14 @@ type Datetime time.Time
 
 const NormalDatetimeFormat = "2006-01-02 15:04:05"
 
+var (
+	datePattern *regexp.Regexp
+)
+
+func init() {
+	datePattern, _ = regexp.Compile(`([-:\s])(\d)([-:\s])`)
+}
+
 func (t Datetime) MarshalJSON() ([]byte, error) {
 	if y := t.Year(); y < 0 || y >= 10000 {
 		return nil, errors.New("Time.MarshalJSON: year outside of range [0,9999]")
@@ -58,7 +67,7 @@ func (t Datetime) FromString(str string) Datetime {
 }
 
 func ParseDatetime(str string) Datetime {
-	str = strings.TrimSpace(str)
+	str = dateStrFormat(str)
 	tm, err := time.Parse(NormalDatetimeFormat, str)
 	if nil != err {
 		return Unix(0, 0)
@@ -379,3 +388,27 @@ func Until(t Datetime) time.Duration {
 func Unix(sec int64, nsec int64) Datetime {
 	return Datetime(time.Unix(sec, nsec))
 }
+
+func dateStrFormat(input string) string {
+	input = strings.ReplaceAll(strings.TrimSpace(input), "/", "-")
+	if strings.Index(input, ":") > 0 && strings.Index(input, ":") == strings.LastIndex(input, ":") {
+		input = input + ":00"
+	}
+	for {
+		if datePattern.MatchString(input) {
+			input = datePattern.ReplaceAllString(input, `${1}0${2}${3}`)
+		} else {
+			break
+		}
+	}
+	if strings.Index(input, ":") == 1 {
+		input = "0" + input
+	}
+	length := len(input)
+	if length > 2 {
+		if strings.LastIndex(input, ":") == length-2 {
+			input = input[0:length-1] + "0" + input[length-1:]
+		}
+	}
+	return input
+}

+ 1 - 1
utils/date/time.go

@@ -58,7 +58,7 @@ func (t Time) FromString(str string) Time {
 }
 
 func ParseTime(str string) Time {
-	str = strings.TrimSpace(str)
+	str = dateStrFormat(str)
 	tm, err := time.Parse(NormalTimeFormat, str)
 	if nil != err {
 		return Unix(0, 0).ToTime()