3 回答

TA贡献1830条经验 获得超9个赞
在时间字符串上使用布局字符串(例如“2006-01-02 15:04:05.999”)调用 time.Parse。如果这导致有效的 time.Time 值并且没有错误,那么您的字符串应该在数据库中工作。
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.Parse 在 Go 中转换字符串,然后将 time.Time 值写入数据库。

TA贡献1777条经验 获得超10个赞
您可以使用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)

TA贡献1876条经验 获得超5个赞
一种解决方案是使用布局字符串和 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!")
}
}
- 3 回答
- 0 关注
- 217 浏览
添加回答
举报