2012-08-13 75 views
1

我在這裏有點問題,我將自己放棄,我希望這裏的專家能夠幫助我挽救我的數據。如何將(錯誤的)12:00時間轉換爲2400時間?

我有一個程序來收集一些財務數據。數據的格式如下

時間,數據

時間,數據

...

它是文本格式的,我有大約30個文件每個約1-2 GB 。我的問題是當我第一次啓動它時,我不小心將它格式化爲12小時時間格式「yyyy/MM/dd hh:mm:ss.fff」而不是2400小時的時間「yyyy/MM/dd HH:mm :SS.FFF」。

現在我的數據是12小時格式,沒有am/pm。

我現在需要編寫一個程序將12小時格式轉換爲2400格式。我面臨的問題如下:

  1. 數據大致按時間順序排列。時間戳來自數據服務器並取決於互聯網流量,訂單可能爲1秒左右。但考慮到我收集的數據量,它可能高達100000行無序。如果沒有上午/下午,1200上午1200上午(我需要從中減去12小時)或1200pm,我什麼都不做。

  2. 文件的開始可以在任何給定的時間開始(我手動打開程序來收集,所以時間不準確),所以沒有放眼望去,看到了當天的改變,我不知道,如果10 :00是上午或下午

我嘗試轉換之前的時間,但未成功。任何人都可以通過提供一些代碼或僞代碼來幫助我?

編輯:現在我可以正確地說出我的問題,我需要弄清楚如果我是在AM模式或PM模式下從數據,如果沒有這麼多的行,我可以使用excel並手動更正看看接下來的幾行,並推斷它是AM模式還是PM模式。有了20億條線路,我需要對其進行邏輯編程,以確定它是AM還是PM模式,這是我難以做到的。以及我如何處理那些在轉換時間內失靈的幾分鐘?

+1

文件創建時間是否與正確的第一行時間一致? – 2012-08-13 15:30:58

+0

時間順序有多粗糙,即記錄是否超出順序一分鐘? – Les 2012-08-13 15:34:43

+0

參考這個文檔:http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx – DelegateX 2012-08-13 15:37:19

回答

-1

中午12點爲0000和12點是1200,但凌晨1點是0100和下午1點是1300(因此,有更多的東西比從上午12點只是減去12。

如果在時間閱讀到的DateTime對象,這是因爲使用.AddHours(雙)一樣簡單

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

你如何決定,如果你在上午或下午模式是你的,我不太明白,爲什麼你不能因爲你解決問題表示數據隨時產生。

如果在字符串上運行「yyyy/MM/dd hh:mm:ss.fff」(12小時格式,不帶am/pm),我會說。

  • 如果它的工作原理你知道:日期要麼是還在AM/PM模式或在24小時格式
  • 的AM如果失敗的話,你知道:日期是24小時模式,它是PM (因爲它會走出12小時模式的範圍)

使用的格式「YYYY/MM/DD HH:MM:SS.FFF」應該始終解析你的字符串,你知道以下內容:

  • 如果它真的是上午時間,你有更正t日期。
  • 如果時間超過12:59,您將擁有PM的正確日期(因爲它以24小時格式報告它)
  • 如果日期應該是PM時間,但作爲AM時間讀入,那麼你知道你在12小時的格式,並需要檢查先前或下面的線路,試圖確定它應該是AM還是PM。

你或許可以根據這些信息和任何其他日期/時間信息來設計一些邏輯來獲得你想要的結果。

編輯:

你也許能夠做的就是看文件修改的時間(或創建時間,如果你能),這應該給你的上午或下午。您應該知道第一個(或最後一個)輸入是AM/PM,然後可以從那裏繼續。

例如:如果最後一個入口的時間是11:00(上午),然後下一行是同一天的3:00,那麼您將知道它是3:00(PM)。 但是,如果日期發生變化,您可能無法確定該條目是否在AM/PM開始。查看某一天的所有數據可能會給你答案。如果當天的參賽作品僅來自上午或只有下午,您將無法確定。

+0

@ Plater,謝謝,我有點明白你的意思,我從來沒有想過這件事,需要消化它。 – 2012-08-13 17:20:50

+0

現在我明白你的意思了,我回到原點。我面臨的問題是我需要弄清楚,如果我處於AM模式或PM模式的數據,如果沒有太多的線,我可以使用excel並糾正它,手動查看接下來的幾行並演繹如果是AM模式或PM模式。有了20億條線路,我需要對其進行邏輯編程,以確定它是AM還是PM模式,這是我難以做到的。 – 2012-08-13 17:32:29

1

假設記錄之間永遠不會超過12個小時,您的轉換程序只需要跟蹤它目前是在查看AM還是PM時間。然後,每當小時達到12或換到較低的數字時,您切換AM/PM標誌。您必須提供一個參數,告訴其啓動模式。

相關問題