1

ここで少し問題があります。自分であきらめようとしています。ここの専門家が私のデータを救うのを手伝ってくれることを願っています。

私はいくつかの財務データを収集するプログラムを持っています。データのフォーマットは次のとおりです

時間、データ

時間、データ

...

テキスト形式で、それぞれ約 1 ~ 2 GB のファイルが約 30 個あります。私が抱えている問題は、最初に起動したときに、誤って 2400 時間形式の "yyyy/MM/dd HH:mm" ではなく、"yyyy/MM/dd hh:mm:ss.fff" という 12 時間形式でフォーマットしてしまったことです。 :ss.fff".

現在、私のデータは午前/午後なしの 12 時間形式になっています。

12 時間形式を 2400 形式に変換するプログラムを作成する必要があります。私が直面している問題は次のとおりです。

  1. データはおおよそ時系列順に並べられています。タイムスタンプはデータ サーバーからのもので、インターネット トラフィックによって異なります。順序は 1 秒程度です。しかし、私が収集したデータの量を考えると、最大 100000 行の順序が間違っている可能性があります。

  2. 午前/午後なしでは、1200 はおそらく 1200 am (そこから 12 時間を引く必要があります) または 1200pm で何もしません。

  3. ファイルの開始はいつでも開始される可能性があります (収集するプログラムを手動でオンにするため、時間は正確ではありません)。したがって、先を見て日の変化を確認しないと、10:00 が午前かどうかわかりません。午後

以前の時間を変換しようとしましたが、失敗しました。誰かがコードまたは疑似コードを提供して私を助けることができますか?

編集:今、私は自分の問題を正確に言葉で表すことができます。データからAMモードかPMモードかを判断する必要があります。行数がそれほど多くない場合は、おそらくExcelを使用して修正し、次を手動で見ることができます数行表示して、AM モードか PM モードかを推測します。1/2 億行の場合、論理的にプログラムして、AM モードか PM モードかを判断する必要がありますが、これは困難です。また、移行時間中に異常な数分間を処理するにはどうすればよいですか?

4

2 に答える 2

1

レコード間の間隔が 12 時間を超えることがないと仮定すると、変換プログラムは、現在午前と午後のどちらを参照しているかを追跡するだけで済みます。次に、時間が 12 に達するか、それより低い数値にラップアラウンドするたびに、AM/PM フラグを切り替えます。どのモードで開始するかを示すパラメーターを提供する必要があります。

于 2012-08-13T15:53:28.883 に答える
-1

午前 12 時は 0000、午後 12 時は 1200 ですが、午前 1 時は 0100、午後 1 時は 1300 です (つまり、午前 12 時から 12 を引くだけではありません。

DateTimeオブジェクトに時刻を読み込む場合は、.AddHours(double) を使用するのと同じくらい簡単です。

myDateTime=myDateTime.AddHours(12);//Add 12 hours
//Or
myDateTime=myDateTime.AddHours(-12);//Subtract 12 hours

AM モードか PM モードかを判断する方法はあなた次第です。データはいつでも生成されると言ったので、問題を解決できない理由はよくわかりません。

文字列に対して "yyyy/MM/dd hh:mm:ss.fff" (午前/午後のない 12 時間形式) を実行すると、私は言います。

  • 日付が午前/午後モードのままか、24 時間形式の AM のどちらかです。
  • 失敗した場合は、次のことがわかります。日付は 24 時間モードで、午後です (12 時間モードの範囲外になるため)。

「yyyy/MM/dd HH:mm:ss.fff」の形式を使用すると、常に文字列が解析され、次のことがわかります。

  • それが本当に午前の時間であれば、正しい日付を持っています。
  • 時間が 12:59 を超えている場合は、PM の正しい日付が表示されます (24 時間形式で報告されているため)。
  • 日付が PM 時間であるはずなのに、AM 時間として読み込まれている場合、12 時間形式であることがわかり、前後の行を調べて AM か PM かを判断する必要があります。

おそらく、その情報とその他の日付/時刻情報から何らかのロジックを考案して、目的の結果を得ることができます。

編集:

できることは、ファイルの変更時刻 (または可能であれば作成時刻) を調べることです。これにより、AM または PM が得られます。最初 (または最後) のエントリが AM/PM であるかどうかを確認し、そこから先に進むことができます。

例: 最後のエントリの時間が 11:00 (AM) で、次の行が同じ日の 3:00 である場合、3:00 (PM) であることがわかります。ただし、日が変わると、エントリが AM/PM に開始されるかどうかを判断できない場合があります。特定の日のすべてのデータを調べると、答えが得られる場合があります。その日のエントリが午前のみまたは午後のみの場合、確実に判断することはできません。

于 2012-08-13T15:42:25.890 に答える