C#中的前导零日期格式

35

我有这个函数...

private string dateConvert(string datDate)
{
        System.Globalization.CultureInfo cultEnGb = new System.Globalization.CultureInfo("en-GB");
        System.Globalization.CultureInfo cultEnUs = new System.Globalization.CultureInfo("en-US");

        DateTime dtGb = Convert.ToDateTime(datDate, cultEnGb.DateTimeFormat);
        datDate = dtGb.ToString(cultEnUs.DateTimeFormat.ShortDatePattern);

        return datDate;
}

但我希望在低位数(1-9)仍然保留前导零,这样日期将显示为11-09-2009(月-日-年)...

现在如果我不进行转换,我会使用string.Format("{0:d}", dateVar)。那么如何在转换中实现这一点?

***** 解决方案 *****

使用下面答案的稍微修改版本(即可以呈现的版本)。

Convert.ToDateTime(datDate).ToString("MM-dd-yyyy");

1
问一个有点傻的问题,你为什么不将其解析并将其保留为日期值,直到需要将其呈现给用户? - Rowland Shaw
1
我们需要生成一个深度链接,以满足我们使用的第三方应用的要求。这是更大脚本的一部分,使合作伙伴更轻松地链接。由英国公司、印度开发人员和美国日期格式组成。 - Chris McKee
3个回答

62
return dateTimeValue.ToString("MM-dd-yyyy");

3
同意 - 从http://msdn.microsoft.com/en-us/library/system.datetime.toshortdatestring(VS.85).aspx得知,EN-US的ShortDatePattern为“M/d/yyyy”,它将去掉前导零并使用“/”而不是“-”作为分隔符。 - Zhaph - Ben Duguid
@Zhaph:日期被重新解析并传递到URL中,因此需要使用分隔符“-”。 - Chris McKee
1
这个方案 (整个内容) 对于我的需求来说行不通,但是将其修改为
Convert.ToDateTime(datDate).ToString("MM-dd-yyyy"); 则非常好用。感谢。
- Chris McKee
硬编码日期时间格式对于全球化来说是不好的。肯定有更好的方法来解决这个问题。 - jsuddsjr

3
我建议使用最新的 C# 缩写格式(格式说明符)以增强可用性和易读性:
return dateTimeValue:MM-dd-yyyy;

简洁明了。

3

在进行转换之后,您不能使用string.Format吗?

例如:return string.Format("{0:d}", datDate);


1
这正是我猜测的,但输入20-03-2009却产生了3-20-2009。 - Chris McKee
是的,我不知道当时在想什么,Mehrdad的答案应该是可行的。 - Glenn Slaven
你为什么保留答案? - Anders Lindén
1
d 格式的输出取决于 CultureInfo。因此,对于 en-US,它将给出 3/20/2009,对于不变的文化,它将给出 03/20/2009,对于德国文化,它将给出 20.3.2009 等等。 - JHBonarius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接