各言語での日付型の比較方法になります。
(C#、VB.net、バッチ、PowerShell、SQLServer)
処理の実行判断やレコードの比較で使うことが多いと思います。
ほとんどの言語で比較演算子での比較が可能なのですが、言語によっては一工夫必要であったりするため、意外と覚えきれておらずに検索することが多いです。
C#の場合
C#とVB.netの場合は比較演算子と関数の2種類の実現方法があります。
可読性や他言語を渡り歩く事を考えると比較演算子の方がいいと思います。
比較演算子を使う際にはDateTime型でなければ比較ができず、文字列であるString型の際に比較演算子が使えないため関数での比較を行う事になります。
ただし、この場合でもDateTime型にキャストすれば比較演算子を使う事ができます。
各環境のポリシーに従いましょう。
//比較演算子を使う方法
if (DateTime.Now == DateTime.Now.AddMinutes(1))
{
//イコールになります
}
if (DateTime.Now < DateTime.Now.AddMinutes(1))
{
//右側が後の日時の時に入ります
}
if (DateTime.Now > DateTime.Now.AddMinutes(1))
{
//右側が前の日時の時に入ります
}
//関数を使う方法
if (DateTime.Now.CompareTo(DateTime.Now.AddMinutes(1)) == 0)
{
//イコールになります
}
if (DateTime.Now.CompareTo(DateTime.Now.AddMinutes(1)) == -1)
{
//引数が後の日時の時に入ります
}
if (DateTime.Now.CompareTo(DateTime.Now.AddMinutes(1)) == 1)
{
//引数が前の日時の時に入ります
}
VB.netの場合
'比較演算子を使う方法
If DateTime.Now = DateTime.Now.AddMinutes(1) Then
'イコールになります
End If
If DateTime.Now < DateTime.Now.AddMinutes(1) Then
'右側が後の日時の時に入ります
End If
If DateTime.Now > DateTime.Now.AddMinutes(1) Then
'右側が前の日時の時に入ります
End If
'関数を使う方法
If DateTime.Now.CompareTo(DateTime.Now.AddMinutes(1)) = 0 Then
'イコールになります
End If
If DateTime.Now.CompareTo(DateTime.Now.AddMinutes(1)) = -1 Then
'引数が後の日時の時に入ります
End If
If DateTime.Now.CompareTo(DateTime.Now.AddMinutes(1)) = 1 Then
'引数が前の日時の時に入ります
End If
バッチの場合
バッチの場合かなり厄介になります。
数値での比較にしたいため、日付や時間の記号がない形式にしてからの比較となります。
また遅延環境変数のsetlocal enabledelayedexpansionが必要になります。
setlocal enabledelayedexpansion
Set NOW=%Date:~0,4%%Date:~5,2%%Date:~8,2%%Time:~0,2%%Time:~3,2%
Set NOW2=%Date:~0,4%%Date:~5,2%%Date:~8,2%%Time:~0,2%%Time:~3,2%
if !NOW! lss !NOW2! (
echo 右側のが大きい
) else if !NOW! equ !NOW2! (
echo 等しい
) else (
echo 左側のが大きい
)
PowerShellの場合
PowerShellの場合は単純な比較でいいのですが、比較演算子が.net系というよりはバッチに近い書き方になります。
$NOW = get-date
$NOW2 = get-date
if ($NOW -eq $NOW2){
echo 等しい
}
if ($NOW -gt $NOW2){
echo 右側のが大きい
}
if ($NOW -lt $NOW2){
echo 左側のが大きい
}
ストアドプロシージャの場合
SQLServerでは特にカラムの比較やカーソル内で使う機会が多く、特にデータベースという特性上頻度が多くなります。
ただし比較自体は比較演算子で可能なためそれほど難しくないです。
if getdate() = getdate()
begin
print '等しい'
end
if getdate() < getdate()
begin
print '右側のが大きい'
end
if getdate() > getdate()
begin
print '左側のが大きい'
end