2010-09-13 115 views
0

在我的應用程序中,我向用戶展示了一個用於自定義生成的文件名稱的選項。程序讀取的格式字符串類似於用戶可以根據自己的喜好自定義的"yyyyMMdd-%1-%2-%3-%4"自定義格式包括日期

在這種情況下的日期格式爲yyyyMMdd%1就像1000P的行程數,%2是原點代碼等PTTTT,%3就像PHYUD的目的地代碼,和%4是仲停止代碼等YYYY123。

我在將實際數據和格式設置到自定義字符串時遇到問題。我相信它會堵塞日期格式。到目前爲止,我有

sOut = txtFormatPattern.Text 
sOut = sOut.Replace("%1", "1000P") 
sOut = sOut.Replace("%2", "PTTTT") 
sOut = sOut.Replace("%3", "PHYUD") 
sOut = sOut.Replace("%4", "YYYY123") 

sOut = myDate.ToString(sOut) 'date is July 01, 2007 

輸出爲 「20070701-#1000P-PTTTTP12YUD(YYYY123)」 問題顯然這是我最後一次轉換。該字符串包含用於表示PHYUD中特定日期的一部分的關鍵字符。所以我的問題是如何讓我的用戶能夠靈活地根據需要對輸出進行格式化,然後將其正確轉換?

AGP

回答

0

以及我想上面說也包括一定的靈活性的日期和時間與他們同行替換標記。我已經通過執行解決了這個以下:

'first replace the tokens by escaping the % character and number so that the 
'date/time formatting ignores it 
sOut = txtFormatPattern.Text 
sOut = sOut.Replace("%1", "\%\1") 
sOut = sOut.Replace("%2", "\%\2") 
sOut = sOut.Replace("%3", "\%\3") 
sOut = sOut.Replace("%4", "\%\4") 

'now apply the date/time formatting as set by the user. the end result strips out 
'the escape characters and ignores them for date/time formatting 
sOut = myDate.ToString(sOut) 'date is July 01, 2007 

'we should now have applied the date/time formatting and still have the original 
'tokens so just replace 
sOut = sOut.Replace("%1", "1000P") 
sOut = sOut.Replace("%2", "PTTTT") 
sOut = sOut.Replace("%3", "PHYUD") 
sOut = sOut.Replace("%4", "YYYY123") 

採用這種常規用戶可以設置格式化字符串爲「yyyyMMdd-%1-%2-%3-%4」和所產生的輸出將是「20070701 - #1000P-PTTTT-PHYUD-YYYY123「

這應該適用於日期/時間格式化的任何變體,用戶可以在選項中設置,因爲有效令牌總是由%n表示。

AGP

+0

請編輯您的原始問題以添加信息。這不是論壇,所以我們不會「回覆主題」。 – 2010-09-14 15:51:58

+0

不確定這是什麼意思。我已經添加了儘可能多的信息,因爲我認爲是需要的。你的意思是,如果我找到了答案將其添加到原始問題,或者我可以像我在這裏添加它嗎? – sinDizzy 2010-09-14 15:54:55

0

您可以使用String.Format做你想要什麼。花括號內的每個部分都是傳遞給函數的參數的佔位符。

或者,您可以將冒號放在另一個特定於參數的格式化字符串中。

sOut = String.Format("{0:yyyyMMdd} {1} {2} {3} {4}", myDate, "1000P", "PTTTT", "PHYUD", "YYYY123") 
+0

謝謝你的提示。如果日期的格式保持一致,我可以這樣做,但我恐怕不會。用戶可以選擇使用他們希望的幾乎任何格式。例如類似於yyyy-%1-MM-%2-dd(%3)。你的提示雖然給了我思考的食物。謝謝。 – sinDizzy 2010-09-14 20:18:03