ファイルの作成時刻と現在時刻を減算して、差があるか確認したい への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 魔界の仮面弁士  (社会人) 投稿日時 2021/10/26 14:24:40
> Dim fileDate As String
> 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

のような判定も可能になります。
投稿者 きの  (社会人) 投稿日時 2021/10/26 12:02:00
こんにちは。vb.netでの質問です。ファイルの作成時刻と現在時刻を比較(減算)し、結果が0ある、0でないという分岐をしたいんですが、分岐の時点でエラーが出ます。知恵をお貸しください。。

Dim Now As DateTime = DateTime.Now
Dim Span As TimeSpan
Dim fileDate As String

   fileDate = FileDateTime("D:\a.txt")
   
   Span = Now.Subtract(fileDate)

   If  Span <> 0 Then  ←ここでエラーが出るので、Spanを何か(数値型など)に変換すればいける?

   EndIf