2017-03-22 17 views
1

私は2つの元のファイルを持っています。私はそれらを暗号化するために暗号化アプリケーションを使用しています。このアプリケーションは7zipのようなこれらのファイルの最終変更日を変更するので、元のファイルの最終変更日をテキストファイルであるので、後でこの日付をテキストファイルから読み込み、上書きする前にどのファイルが新しいかを比較することができます。日付を数字に変換する

しかし、私は日付と時刻のデータ型を使いたくないので、数値に変換したいのですが、私が知っている唯一の方法はそれを二重に変換することですが失敗しました。

だから、数字を日付として保存して(もしあれば)この日付を比較して、どのファイルが新しいかを知るために再変換する方法を探しています。文字列に。

現在ファイルの最終更新日は.LastWriteTimeで、.ToOADateを使用してダブルに変換しますが、正しい結果は得られませんでした。

私は、このコードでは問題を単純化しようとした:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 

     Dim d1 As Double, d2 As Double 

     d1 = IO.File.GetLastWriteTime("D:\g2.xlsb").ToOADate     
     d2 = 42816.7630876736 

     Debug.Print(d1)  '42816.7630876736 
     Debug.Print(d2)  '42816.7630876736 
     Debug.Print(d1 = d2) 'False 

    End Sub 

を、私はラインで、このコード行をデバッグし、その12進42816.763087673608と番号を表示し、マウス1 d1を置くが、私はそれを保存するときときテキストファイルは、小数点以下10桁の数字を保存します42816.7630876736

私の質問は、日付を数字に変換してテキストファイルに保存し、(後で)このテキストファイルからこの番号を読み取り、その日付を再作成する方法です。

彼の答え(コメント内)のおかげで、DateTime.Ticksは、私がダブルとその無限の問題を避けるための素晴らしい解決策です。

そして、私は前のタイトルを残念に思っています(私はそれを編集しました)。

+1

使用DateTime.Ticks代わり – Steve

+1

@Steve(ロングティックどこかに保存された値を返しますGetTicksFromStorageと呼ばれる方法の存在を仮定して)ありがとう非常に「DateTime.Ticks」は私が探していたものです。それは(ダブルとその問題)よりずっと良いです。 – Fadi

+1

また、テキストファイルに保存されたダブルから日付を再作成する必要がある場合は、ダブルに関する問題が悪化します。 – Steve

答えて

3

あなたがDateTimeのドキュメントに読み込むことができたよう

時間の値は

を刻み、明らかDateTime構造体は、ロングTicks名前付きの型の性質を持っていると呼ばれる100ナノ秒単位で測定されています。

これはあなたの要件に最適な候補のようです。 Ticksを使用すると、日付Ticksの文字列表現をテキストファイルに保存したり、バイナリ形式でlong値をバイナリファイルに書き込んだりすることができます。 いずれの場合でも、長い整数値からは精度の問題はありません。また、ストレージから値をリロードすることもできます。

さらに、Ticks値を使用してDateTime変数を再作成し、これを使用してファイルのLastWriteTime(またはLastWriteTimeUtc)でチェックすることができます。これは、double値では実行できません。例えばので

Dim ticks as Long = GetTicksFromStorage() 
Dim curTicks = IO.File.GetLastWriteTime("D:\g2.xlsb").Ticks 

If ticks < curTicks Then 
    Console.WriteLine("G2 is newer") 
Else 
    .... 
End If 

または

' Here the result of the GetTicksFromStorage is passed to the DateTime constructor 
Dim storedDate as DateTime = new DateTime(GetTicksFromStorage()) 
Dim curDate = IO.File.GetLastWriteTime("D:\g2.xlsb") 
if storedDate < curDate Then 
    Console.WriteLine("G2 is newer") 
Else 
    .... 
End If   
+0

あなたの偉大な回答をお寄せいただきありがとうございます。 – Fadi

関連する問題