2011-09-20 55 views
0

如果之前已詢問過此問題,請指出正確的方向。我似乎無法找到任何有用的我的谷歌技能。VBA使用格式()或CDate()將字符串轉換爲日期的問題

我有以下代碼,它讀取像這樣的字符串;停電開始日期:05/10/11 23:59 EST
翻出的最新信息,即05/10/11 23:59

sStartTime = Mid(objItem.Body, 18, 15) ' Extract the start time 
Debug.Print "sStartTime after reading: " & sStartTime 
sStartTime = Format(sStartTime, "dd/mm/yy hh:mm") ' Format date correctly 
Debug.Print "sStartTime after formatting: " & sStartTime 

這是輸出我通常會:

sStartTime after reading: 05/10/11 23:59 
sStartTime after formatting: 10/05/11 23:59 

但有時會交換一天甚至一年:

sStartTime after reading: 14/07/11 23:59 
sStartTime after formatting: 11/07/14 23:59 

然後CDATE完全充塞周圍的事物,轉換日期這樣的事情在1931年...任何幫助日期字符串轉換爲日期OBJE ct將不勝感激。

===============

編輯:也許應該已經在最初的帖子中提到這一點。讀取字符串後的想法是將其轉換爲Date對象,以便創建日曆約會。 當前我使用這個;

dStartTime = CDate(sStartTime) 

我認爲這是問題線,sStartTime = 「29/09/11 23:00」(DD/MM/YY HH:MM)和dStartTime =「2029年11月9日11:00: 00 PM「

因此很顯然有一些轉換問題在那裏進行,但我不知道我打算將哪種格式送入CDate函數以便將 29/09/11 23:00轉換爲等價日期對象。

+0

計算機控制面板上的日期和時間設置是什麼?你似乎在處理美國和其他日期格式的混合。你的日期字符串不是明確的,所以這會導致麻煩。 – Fionnuala

+0

Gosh ...我希望文檔會指定它依賴於系統日期/時間來完成轉換! 我的日期/時間設置爲m/dd/yyyy和標準hh:mm上午/下午時間。 轉換字符串的最佳方式是什麼? 我無法更改系統時間或字符串的輸入方式。 – FizzBuzz

+0

您的輸入字符串表示EST,所以這表明它是美國的日期,因爲您的系統日期如此,所以這應該使事情變得更容易,但是,爲了完全自信,通常最好使用DateSerial:http://msdn.microsoft.com/en-us/library/gg264202.aspx – Fionnuala

回答

5

Format(sStartTime, "dd/mm/yy hh:mm")無法正常工作,因爲sStartTime是一個字符串,不是日期。
你必須做一些額外的工作來獲得正確鍵入日期,就像
dStartTime= DateSerial(Mid(sStartTime,10,2),Mid(sStartTime,7,2),Mid(sStartTime,4,2)) + TimeSerial(...) 等...
然後,你就可以正確地應用您的格式功能。

+0

作品一種享受!非常感激! – FizzBuzz

相關問題