2014-09-03 74 views
2

我想在固定寬度的列中顯示短日期和短時間,就像DIR命令的輸出一樣。我希望保持這種固定寬度格式儘可能接近本地日期/時間慣例。如果本地格式已經是固定寬度,請使用它。否則,使用最近的固定寬度的東西。.NET中的短日期和短時間模式,帶前導零

Similar question之前已被問過,但回答「use dateTimeValue.ToString(」MM-dd-yyyy「)」並不是非常有用,因爲它會殺死本地化。

某些本地日期時間格式已經是固定寬度。例如。對於德國(de-DE),短日期格式的字符串是「dd.MM.yyyy」,在任何日期都會產生10個字符。

另一方面,美國(「en-US」)格式是「M/d/yyyy」。這產生可變寬度的字符串:存在針對該時間部分

3/1/2011 - 8 characters 
3/12/2011 - 9 characters 
12/31/2011 - 10 characters. 

類似的問題:「下午1點34分」具有比「上午12時30分」更少的字符。

然而,即使在美國的窗戶上,「dir」命令也顯示了整齊排列的日期和時間,並帶有前導零。

08/13/2011 09:48 PM   14,336 holidays.xls 
08/14/2011 12:47 PM   36,352 holidays2.xls 

提取獨立的H,H,d,M和與HH,HH,DD和MM分別將有助於取代他們,但我希望有人已經這樣做(和測試也許正則表達式!),我可以借鑑普通的智慧。

+0

也許你可以搜索'CultureInfo.CurrentCulture.DateTimeFormat.GetAllDateTimePatterns('d')'的輸出,並且以某種方式使用包含'MM'和'dd'的字符串。 – 2014-09-03 22:03:15

回答

1

對陽曆日期和時間的個位數,唯一出現的是那些你想墊,所以正則表達式替換肯定是正確的和可行的解決方案:

var padded = Regex.Replace(dateOrTimeString, @"(?<=^|\D)(\d)(?=\D|$)", "0$1"); 

這既不是之前所有的數字匹配也不跟隨另一個數字並且預先設置零。適用於日期,時間和合並日期/時間。

+0

簡潔優雅的解決方案。謝謝!我甚至不知道.NET正則表達式具有「零寬度積極lookbehind」之類的東西:)看起來它自1.1版以來一直存在。 – 2014-09-04 02:00:05

相關問題