2015-06-09 55 views
0

我有一個我想解決的特殊問題。我寫了一個MonthYear類,它基本上在場景中保留DateTime對象,並且只允許DateTime的月份和年份部分的方法/屬性。一切工作正常。在班級中使用DateTime格式但限制時間標記

現在我有另一個要求。我想允許任何使用我的課程的人使用使用日期標記的ToString方法,但我只想格式化月,年,月,年,月,或t作爲文字。

是否有可能在不編寫我自己的解析器/標記器的情況下做這樣的事情?

編輯:我的問題有點難以理解,我猜。

這是一個更簡單的形式。假設我延長DateTime類,我想重寫ToString方法以這樣一種方式,它讓我下面的輸出:

DateTimeEx d = new DateTimeEx(2015, 6, 9); 
Console.WriteLine(d.ToString("dd MM yy")); // dd 06 15 
Console.WriteLine(d.ToString("dd MMM yyyy HH mm tt")); // dd Jun 2015 HH mm tt 

我想忽略,除了我上面提到的那些每個令牌。我希望這有助於簡化問題。

我不需要幫助寫一個解析器方法,只允許上述令牌。我只需要知道是否有一種方法可以用內置的東西來完成。

+1

_是否有可能.._您是否先嚐試過?你可以通過這種方式更具體嗎?還顯示'MonthYear'類。 –

+0

我對你的要求有點困惑。你能否給出一個例子,說明什麼數據會進入你想要從你的toString方法中獲得什麼數據? – Fudztown

+0

@Soner&Fudztown:對於令人困惑的問題抱歉。請參閱編輯。 – Yogesh

回答

2
DateTime d = new DateTime(2015, 6, 9); 
Console.WriteLine(d.ToString("dd MM yy")); // dd 06 15 
Console.WriteLine(d.ToString("dd MMM yyyy HH mm tt")); // dd Jun 2015 HH mm tt 

var regex = new Regex("[yY]+|[M]+"); 
Console.WriteLine(regex.Replace("dd MM yy", m => d.ToString(m.Value))); 
Console.WriteLine(regex.Replace("dd MMM yyyy HH mm tt", m => d.ToString(m.Value))); 

輸出

09 06 15 
09 Jun 2015 00 00 AM 
dd 06 15 
dd Jun 2015 HH mm tt 

一個正則表達式來查找格式字符串只有月/年。匹配用於格式化日期時間和格式化結果替換格式字符串的一部分

+0

這不會處理年份和月份格式說明符轉義的情況。 – juharr

+0

爲什麼我從來沒有想過用正則表達式來解決這個問題!我非常想通過IDateFormatInfo等解決這個問題,我完全忘記了KISS原理。這是一個非常優雅的解決方案。非常感謝。 – Yogesh

+0

@juharr,我不知道我瞭解你。你是什​​麼意思逃脫?你能給一個格式字符串的例子嗎? – ASh

-2

我會覆蓋ToString([arg1]),只需在重載中調用基地並事先過濾arg1並刪除所有不適合您的模式的所有內容。

+0

對不起,對我來說沒有多大意義。你能否詳細說明一下?你的意思是說我應該逃離每一個令牌,除了傳遞給基礎ToString之前我需要的嗎? – Yogesh

+0

正確的Sr對我的英語不好 –

相關問題