■VB.Net+PostgreSQLで日付型にはまる
日付処理ではまった話です。
VB.Netで現在日時を取得する時は
DateTime.Now で取得できます。
文字列にしたい場合は
DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")
とすると年/月/日
時:分:秒と表示する事が出来ます。
PostgreSQLで時間つきの日付を扱う時は型として
timestamp without time zone
を使います。
VB.Netでパラメータを使用してプログラムを作っていたのですが
.Parameters.Add("last_kakutei_date", NpgsqlDbType.Timestamp)
このようにパラメータを設定し
Dim New_Date As DateTime =
DateTime.Now
.Parameters.Item("last_kakutei_date").Value =
New_Date
値を代入します。
このようにするとデータの登録は上手く行ったのですが呼び出す事が
上手く出来ない状態になってしまいました。
pgAdminでデータを確認した所
・・・この時間の小数点以下の数字は何?
調べてみるとミリ秒と言う事が分かりました。
恥ずかしながらデータをミリ秒まで持っている事を知りませんでした
勉強不足ですね。
普段ToString等で日時を処理する時は秒まででミリ秒は使いません
というかミリ秒を表示する書式がありません。
最初の登録は変数をそのまま登録するのでミリ秒のデータが登録される
VB.Netで日付を画面に表示(この時点でミリ秒が表示されないのでミリ秒が消える)
画面のデータを元に検索(ミリ秒のデータが消えているので違う日時になるので検索されない)
と言う流れで検索した時はミリ秒分のデータが消えてしまい、上手く行かなかった事が分かりました
対策としては登録時に
Dim w_Date_Str As String = DateTime.Now.ToString("yyyy/MM/dd
HH:mm:ss")
Dim now_Datetime As DateTime =
DateTime.ParseExact(w_Date_Str, "yyyy/MM/dd HH:mm:ss", Nothing)
このように一旦文字化して再変換。上手くミリ秒のみカットの方法が良く分かりませんでした。
SQLを文字列で作っていた場合はこのような事も無いと思います。
勉強不足によるトラブルですがいい勉強になりました。
トップへ戻る