我们如何检查被认为是MySQL TIMESTAMP的字符串实际上是否有效?使用的格式是:
YYYY-MM-DD HH:MM:SS[.fraction]
其中"分数"有3位数。
例如2016-03-28 12:17:30.022
应该有效。我希望避免正则表达式并使用time.Parse()
,但欢迎任何其他建议。
答案 0 :(得分:5)
使用布局字符串调用time.Parse,例如“2006-01-02 15:04:05.999” 在你的时间字符串上。如果这导致有效的time.Time值并且没有错误,则您的字符串应该在db中工作。
timeStamp, err := time.Parse("2006-01-02 15:04:05.999", yourTimeString)
if err != nil {
// do something with err...
}
// do something with timeStamp...
我不使用MySQL但是在PostgreSQL和Go之间你可以传递时间戳和time.Time值而不转换为字符串......所以这可能会简化你的问题。使用time.Parse在Go中转换字符串,然后将time.Time值写入db。
答案 1 :(得分:2)
您可以使用TIMESTAMP()
将字符串转换为timestamp
。如果它可以转换为有效的时间戳,则它是有效的。如果转换为NULL
,则它不是空时间戳字符串。
使用:
TIMESTAMP('2016-03-28 12:17:30.022') IS NOT NULL
mysql> select TIMESTAMP('2016-03-28 12:17:30.022'), TIMESTAMP('2016-03-28 12:17:300.022');
+--------------------------------------+---------------------------------------+
| TIMESTAMP('2016-03-28 12:17:30.022') | TIMESTAMP('2016-03-28 12:17:300.022') |
+--------------------------------------+---------------------------------------+
| 2016-03-28 12:17:30.022 | NULL |
+--------------------------------------+---------------------------------------+
1 row in set, 1 warning (0.00 sec)
mysql> select TIMESTAMP('2016-03-28 12:17:30.022') IS NOT NULL, TIMESTAMP('2016-03-28 12:17:300.022') IS NOT NULL;
+--------------------------------------------------+---------------------------------------------------+
| TIMESTAMP('2016-03-28 12:17:30.022') IS NOT NULL | TIMESTAMP('2016-03-28 12:17:300.022') IS NOT NULL |
+--------------------------------------------------+---------------------------------------------------+
| 1 | 0 |
+--------------------------------------------------+---------------------------------------------------+
1 row in set, 1 warning (0.00 sec)
答案 2 :(得分:1)
正如@Snowman在评论中所指出的,一种解决方案是使用布局字符串并time.Parse()
package main
import (
"fmt"
"time"
)
func main() {
timestamp := "2016-03-28 11:50:50.476"
const layout = "2006-01-02 03:04:05.999"
_, error := time.Parse(layout, timestamp)
if error != nil {
fmt.Println(error)
} else {
fmt.Println("valid!")
}
}
演示: https://play.golang.org/p/6bcciN_OAb
另外检查:Date parsing in Go