Golang:如何验证MySQL时间戳字符串

时间:2016-03-29 15:07:17

标签: mysql validation date go time

我们如何检查被认为是MySQL TIMESTAMP的字符串实际上是否有效?使用的格式是:

YYYY-MM-DD HH:MM:SS[.fraction]其中"分数"有3位数。

例如2016-03-28 12:17:30.022应该有效。我希望避免正则表达式并使用time.Parse(),但欢迎任何其他建议。

3 个答案:

答案 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