我想在固定宽度列中显示短日期和短时间,例如DIR命令的输出。我希望将此固定宽度格式保持尽可能接近本地日期/时间约定。如果本地格式已经固定宽度,请使用它。否则,使用最近的固定宽度的东西。
之前已经问过Similar question,但答案“使用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 PM”的字符少于“12:30 AM”。
然而,即使在美国的窗户上,“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 :(得分:1)
格里高利日期和时间中唯一出现的单个数字是您想要填充的数字,因此正则表达式替换绝对是一个正确而实用的解决方案:
var padded = Regex.Replace(dateOrTimeString, @"(?<=^|\D)(\d)(?=\D|$)", "0$1");
这匹配所有前面或后面都没有其他数字并且前缀为零的数字。适用于日期,时间和组合日期/时间。