■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を文字列で作っていた場合はこのような事も無いと思います。
 勉強不足によるトラブルですがいい勉強になりました。

トップへ戻る