ファイルの作成時刻と現在時刻を減算して、差があるか確認したい
投稿者 きの  (社会人)
投稿日時
2021/10/26 12:02:00
こんにちは。vb.netでの質問です。ファイルの作成時刻と現在時刻を比較(減算)し、結果が0ある、0でないという分岐をしたいんですが、分岐の時点でエラーが出ます。知恵をお貸しください。。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2021/10/26 14:24:40
> Dim fileDate As String
> fileDate = FileDateTime("D:\a.txt")
まずココがおかしいです。
戻り値は 日付型なのですから、このように書くべきですね。
データ型の指定ミスを防ぐためにも、ファイルの先頭に「Option Strict On」を入れておくことをお奨めします。
> Dim Now As DateTime = DateTime.Now
VB の場合、単独で「Now」だけで現在日時を得られます。
= DateTime.Now
= Date.Now
= DateAndTime.Now
= Now
は、いずれも同じ結果を返します。
そのため、変数名も同じ「Now」にしてしまうと分かりにくくなってしまいます。
あえてそうしているのかもしれませんが、後でプログラムを見た時に、
変数に格納した特定の時刻なのか、その時点の最新日時なのか混乱するので、
個人的には別の変数名にしておくことをお奨めします。
(とはいえ今回は、そのまま「Now という変数」ということにしておきます)
> 作成時刻と現在時刻を比較(減算)し、結果が0ある、0でないという分岐をしたいんですが、
それなら単に 『If fileDate <> Now Then』 で良いと思いますよ。
ちなみに
Dim Span As TimeSpan = Now.Subtract(fileDate)
は、
Dim Span As TimeSpan = Now - fileDate
と書けます。
> If Span <> 0 Then ←ここでエラーが出るので
「If Span <> Nothing Then」もしくは「If Span <> TimeSpan.Zero Then」ですね。
あるいは、「If Span.Ticks = 0L Then」や「If Span.TotalMilliseconds = 0.0R Then」のように
TimeSpan のプロパティ経由で比較する方法もあります。プロパティで比較すると、たとえば
' 3 秒以内の違いは、同じものとしてみなす
If Math.Abs(Span.TotalSeconds) < 3.0R Then
のような判定も可能になります。
> fileDate = FileDateTime("D:\a.txt")
まずココがおかしいです。
戻り値は 日付型なのですから、このように書くべきですね。
Dim fileDate As Date = FileDateTime("D:\a.txt")
データ型の指定ミスを防ぐためにも、ファイルの先頭に「Option Strict On」を入れておくことをお奨めします。
> Dim Now As DateTime = DateTime.Now
VB の場合、単独で「Now」だけで現在日時を得られます。
= DateTime.Now
= Date.Now
= DateAndTime.Now
= Now
は、いずれも同じ結果を返します。
そのため、変数名も同じ「Now」にしてしまうと分かりにくくなってしまいます。
あえてそうしているのかもしれませんが、後でプログラムを見た時に、
変数に格納した特定の時刻なのか、その時点の最新日時なのか混乱するので、
個人的には別の変数名にしておくことをお奨めします。
(とはいえ今回は、そのまま「Now という変数」ということにしておきます)
> 作成時刻と現在時刻を比較(減算)し、結果が0ある、0でないという分岐をしたいんですが、
それなら単に 『If fileDate <> Now Then』 で良いと思いますよ。
ちなみに
Dim Span As TimeSpan = Now.Subtract(fileDate)
は、
Dim Span As TimeSpan = Now - fileDate
と書けます。
> If Span <> 0 Then ←ここでエラーが出るので
「If Span <> Nothing Then」もしくは「If Span <> TimeSpan.Zero Then」ですね。
あるいは、「If Span.Ticks = 0L Then」や「If Span.TotalMilliseconds = 0.0R Then」のように
TimeSpan のプロパティ経由で比較する方法もあります。プロパティで比較すると、たとえば
' 3 秒以内の違いは、同じものとしてみなす
If Math.Abs(Span.TotalSeconds) < 3.0R Then
のような判定も可能になります。