为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
陪伴而非守候 2021-12-27 18:04:42
我们如何检查被认为是 MySQL TIMESTAMP 的字符串实际上是否有效?使用的格式是:YYYY-MM-DD HH:MM:SS[.fraction] 其中“分数”有 3 位数字。例如2016-03-28 12:17:30.022应该是有效的。最好我想避免使用正则表达式,time.Parse()但欢迎任何其他建议。
查看完整描述

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 值写入数据库。


查看完整回答
反对 回复 2021-12-27
?
不负相思意

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)


查看完整回答
反对 回复 2021-12-27
?
慕运维8079593

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!")

  }

}


查看完整回答
反对 回复 2021-12-27
  • 3 回答
  • 0 关注
  • 217 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号