2016-03-29 8 views
1

MySQL TIMESTAMPと見なされる文字列が実際に有効であることを確認するにはどうすればよいですか?使用されるフォーマットは、Golang:MySQLのタイムスタンプ文字列を検証する方法

YYYY-MM-DD HH:MM:SS[.fraction]です。ここで、「小数部」は3桁です。

たとえば、2016-03-28 12:17:30.022は有効です。私は正規表現を避け、time.Parse()を使用したいと思っていますが、他の提案は大歓迎です。

+4

あなたの時間文字列に「2006-01-02 15:04:05.999」のようなレイアウト文字列で呼び出します。その結果、有効なtime.Time値とエラーがない場合は、文字列はdb内で動作するはずです。私はMySQLを使用しませんが、PostgreSQLとGoの間でタイムスタンプとtime.Time値を文字列に変換せずに渡すことができます...多分あなたの問題を単純化します。文字列を隠すためにtime.Parseを使用し、時間を書き込みます。時間値はdbになります。 – Snowman

+0

ありがとう@Snowman。これはまさに私が探していたものです... – tgogos

+0

助けてくれてうれしいです。そのコメントを答えとして投稿しました。 – Snowman

答えて

3

コールtime.Parseを、このような "2006年1月2日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の間、あなたは文字列に変換することなく、タイムスタンプとtime.Time値を周りに渡すことができますしません。文字列を隠すためにtime.Parseを使用し、時間を書き込みます。時間値はdbになります。

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) 
+0

すぐにお返事ありがとうございますが、Goコード内のチェックをしたいと思います。 – tgogos

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

関連する問題