使用C#将DateTime转换为字符串的魔术字符串

时间:2009-11-11 09:13:11

标签: c#

今天我遇到了一个令人讨厌的虫子。这项任务非常简单,我需要做的就是将DateTime对象转换为 “yyyymmdd” 格式的字符串。 “yyyymmdd”部分在外部软件供应商的开发文档中说明。所以,我方便地从他们的文件中复制字符串并粘贴到我的代码中。所以我得到了下一个

public string GetDateString(DateTime dateTime)
{
    return dateTime.ToString("yyyymmdd");
}

非常简单。这么简单,我不想对该方法进行单元测试。 20分钟后,我的组件的其他部分完成。我启动了应用程序以检查事情是否正确。几乎立即我注意到我的网页中有一些假设的日期字段显示 20091511 !这不可能是正确的,一年中没有第15个月。所以,我赶紧回到我的代码来检查可能的错误。事实证明,在将DateTime转换为字符串时,我应该使用“yyyyMMdd”而不是“yyyymmdd”。

承认,这个错误是由于我对细节缺乏关注。所有C#引用中都清除了“mm”和“MM”之间的差异。我仍然想说,如果每天都不能处理这类任务,那么很容易忽略差异。

我的问题是:在一行代码中是否有干净的(即没有神奇的字符串)方法来覆盖? return dateTime.Year + "" + dateTime.Month + "" + dateTime.Day;代码似乎正在运行,但它太像黑客了。

更新:看起来字符串格式是C#可以提供的最佳方式。也许我正在洗脑,但我仍然认为这种编程风格属于低级语言,如c。

4 个答案:

答案 0 :(得分:5)

答案 1 :(得分:4)

String.Format("{0:0000}{1:00}{2:00}", dateTime.Year, dateTime.Month, dateTime.Day);

你可以使用它,但我更喜欢简洁的格式。您也可以使用MM进行特定的月份格式化(例如DateTime.ToString())。

,而不是00

答案 2 :(得分:1)

return dateTime.Year.ToString() + dateTime.Month + dateTime.Day;

您不需要继续添加空字符串,string + number已经返回字符串,并且从左到右解释了添加。

请注意,该行不会返回您的想法,您真正想要的是:

return dateTime.Year.ToString("0000") + dateTime.Month.ToString("00") 
    + dateTime.Day.ToString("00");

答案 3 :(得分:1)

如果那个格式字符串会让你感到烦恼,至少要确保它在一个地方。封装它,例如在扩展方法中:

public string ToMyAppsPrefferedFormat(this DateTime date) {
  return date.ToString("ddMMyyyy");
}

然后你可以说date.ToMyAppsPrefferedFormat()