2016-08-22 20 views
0

私はJavaからC#にいくつかのコードを書き直しています。残念ながら、コードの大半は「ハッキングされた」ので、コードの書き方を推測しています。今、私は挿入する必要がタイムスタンプで少し混乱しました C#でタイムスタンプを比較する

...データベースにいくつかのインサートを再現する必要があります。たとえば、現在のデータベース内のレコードは、次のとおりです。私のコードで 10-AUG-10 05.02.57.347694000 PM

Values in current database

私は似た何かを得ることができました。このコードの22-Aug-16 11.52.20.9857574 AM

アイデアは、現在1で作成したタイムスタンプを比較することです最後の60秒以内に最初のアクションが作成された場合は、いくつかのアクションを実行します。

最初の質問:

どのように私は正確に私はすべてのレコードを持っていることがわかり、10-AUG-10 05.02.57.347694000を再現できる「000」最後に、私がもし/他のもののために必要なのですか、最後を維持するための任意の関数がありますパート9の数字は長いですか?

2番目の質問:それは数字のみをした場合

は、私は、データベースから値を取得することができます知っているし、その後の比較が、フォーマットがあるので、:その部分をどのように扱うか本当にわからない10-AUG-10 05.02.57.347694000

何か提案がありますか?


SOLUTION:

私はこの問題をどうするかの理解を得たいくつかのコメントを読んだ後。私は物事をシンプルに保ち、ちょうどDateTime変数を作成し、次にそれらの2つの間に何分の違いがあるかを見るためにsubtractメソッドを使用することにしました。

例:
日時guidTimestamp。 // 8/25/2016 10:02:47 AM
DateTime currentTimestamp = DateTime.Now;

public int calculateMinutes(DateTime dt1, DateTime dt2) 
    { 
      int min = 0; 
     try  
     {  
      min = (int)((dt1 - dt2).TotalSeconds);  
     }  
     catch (Exception ex)  
     {  
      Debug.WriteLine("Exception - Date Time error: " + ex.Message);  
     }  
     return min;  
    } 
+3

このフィールドのタイプは何ですか?日付/日時でない場合はタイムスタンプではなく、ストリングです。あなたの文字列は直接比較のための "良い"形式ではないので、文字列演算の大きな/驚異的な山が残っているため、直接比較することができます。 –

+3

日付を扱う際のC#(またはそれに関する言語)では、DateTimeオブジェクトを使用するほうがはるかに優れています。それらを比較するときは、Ticksの違いを取り、TimeSpanを作成し、TimeSpanのプロパティを使用してその差異を判断することができます。あなたのケースでは、Ticks差からTimeSpanを作成し、HoursとMinutesプロパティを見て両方が0である(これは60秒未満の差を意味する)ことを確認します。 – Kevin

+3

http://stackoverflow.com/questions/341175/datetime-parse-and-making-it-work-with-a-specific-format文字列をDateTimesに変換する方法についてはこちら –

答えて

2

DB内のフィールドのデータ型は、おそらくstringです。あなたはMSDNと言っているような値のそのような大きな精度については持ちません。

次のコード行は、あなたが述べたように、正確に同じ形式で現在の日付とstringを生成します。

DateTime.Now.ToString("dd-MMM-yy hh.mm.ss.ffffff tt", System.Globalization.CultureInfo.InvariantCulture).ToUpper() + "000" 

次のコード行は、カスタムフォーマットを使用してstringからDateTimeを生成します。

DateTime.ParseExact("10-AUG-10 05.02.57.347694 AM", "dd-MMM-yy hh.mm.ss.ffffff tt", System.Globalization.CultureInfo.InvariantCulture) 

あなたはParseExactプロセスstring値を作るためにmilliseconds一部でこれらの3つのゼロを取り除く必要がある見ての通り。あなたは正規表現について読んだり、必要に応じてハードコードすることができます。

+0

感謝@Seprum、あなたのコードが本当に便利だとわかった! –

関連する問題