C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: 【VB.NET】【SQL】Date型について


(過去ログ 168 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■97338 / inTopicNo.1)  【VB.NET】【SQL】Date型について
  
□投稿者/ 工場プログラマー (74回)-(2021/04/27(Tue) 14:25:39)

分類:[.NET 全般] 

SQL Server2014
VB.NET

テーブルに入っている2001-05-27というデータ型の日付をVB.NETで取得して、
ウォッチ式で見ると#5/27/2001 12:00:00 AM#と表示されますが、
後ろの12:00:00 AMって消すことはできますか?

現在の日付と日付計算したときに合わなくて困っています。

e_date = #5/27/2001 12:00:00 AM# … テーブルから取得した日付
If Format(e_date, "mmdd") = Format(DateAdd("m", 1, Now), "mmdd") Then
↑
ここでFalseになる

ウォッチ式で見るとNowも後ろに時刻が出てしまっていて12:00:00丁度の時しか
Trueになりませんでした。
解決法はありますでしょうか。


引用返信 編集キー/
■97339 / inTopicNo.2)  Re[1]: 【VB.NET】【SQL】Date型について
□投稿者/ 工場プログラマー (75回)-(2021/04/27(Tue) 14:37:15)
2021/04/27(Tue) 14:38:25 編集(投稿者)

分類変え忘れました。
引用返信 編集キー/
■97340 / inTopicNo.3)  Re[1]: 【VB.NET】【SQL】Date型について
□投稿者/ Hongliang (1164回)-(2021/04/27(Tue) 14:43:31)
こういう場合、一旦変数に受け取るとかしてどんな値になっているか確認したほうがいいです。
Dim date_db = Format(e_date, "mmdd")
Dim date_cond = Format(DateAdd("m", 1, Now), "mmdd")
If date_db = date_cond Then ' ここにブレークポイントを張って、date_dbとdate_condを確認

https://docs.microsoft.com/ja-jp/dotnet/api/microsoft.visualbasic.strings.format
Format関数に指定できる書式指定文字列の一覧が掲載されていますが、書式指定文字列は大文字小文字を区別します。
という前提で、mmを確認してみてください。

なおウォッチ式等で表示される #yyyy/MM/dd hh:mm:ss tt# というのは、DateTimeを可視化してるだけであって、DateTime同士を比較する際に何か影響するものではありません。
というか、今回の場合Formatで文字列化して文字列同士で比較しているので、 #...# 表示は本当に一切関係ありません。
引用返信 編集キー/
■97341 / inTopicNo.4)  Re[2]: 【VB.NET】【SQL】Date型について
□投稿者/ 工場プログラマー (76回)-(2021/04/27(Tue) 15:20:06)
No97340 (Hongliang さん) に返信
> こういう場合、一旦変数に受け取るとかしてどんな値になっているか確認したほうがいいです。
> Dim date_db = Format(e_date, "mmdd")
> Dim date_cond = Format(DateAdd("m", 1, Now), "mmdd")
> If date_db = date_cond Then ' ここにブレークポイントを張って、date_dbとdate_condを確認
>
> https://docs.microsoft.com/ja-jp/dotnet/api/microsoft.visualbasic.strings.format
> Format関数に指定できる書式指定文字列の一覧が掲載されていますが、書式指定文字列は大文字小文字を区別します。
> という前提で、mmを確認してみてください。
>
> なおウォッチ式等で表示される #yyyy/MM/dd hh:mm:ss tt# というのは、DateTimeを可視化してるだけであって、DateTime同士を比較する際に何か影響するものではありません。
> というか、今回の場合Formatで文字列化して文字列同士で比較しているので、 #...# 表示は本当に一切関係ありません。

なるほど、Formatを使った際は文字列になるんですね
DateDiffとかってFormatと組み合わせて使えない感じですか?
VBAなんかは一緒に使ってたもんで
引用返信 編集キー/
■97347 / inTopicNo.5)  Re[3]: 【VB.NET】【SQL】Date型について
□投稿者/ 工場プログラマー (77回)-(2021/04/28(Wed) 09:55:17)
##内の文字は関係ないし、自分がやりたかった日付計算も
Format("yyyy",変数) - Format("yyyy",Now)で出来たので解決済みにします。
ありがとうございました。 
解決済み
引用返信 編集キー/
■97348 / inTopicNo.6)  Re[4]: 【VB.NET】【SQL】Date型について
□投稿者/ 魔界の仮面弁士 (3091回)-(2021/04/28(Wed) 10:03:00)
No97347 (工場プログラマー さん) に返信
> Format("yyyy",変数) - Format("yyyy",Now)で出来たので解決済みにします。

これができるという事は、「変数」が Date 型だったということですよね。
であれば、上記の処理ではマズイと思いますよ。
かわりに
 Dim y As Integer = 変数.Year - Now.Year
と書けないか試してみてください。


Format("yyyy",変数) にしてしまうと、変換結果が String 型になってしまうため、
それを引き算しようとすれば、Option Strict On ではエラーになりますし、
Option Strict Off では、おそらく Double 型になってしまうでしょう。

それに "yyyy" 書式は、ロケール依存の変換処理となります。
OS の地域設定が和暦モードの場合、日付を yyyy で書式化すると、
(平成の)「30」年や、(令和の)「3」年に変換されるので、
年数の差を求める際に、都合が悪くなるかと思います。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -