DateTime格式日

时间:2012-03-09 19:52:36

标签: c# datetime

是否有DateTime.ToString(“”)的格式值,它将以三位数指定一年中的某一天?

例如:

  • 2012年1月1日将是001
  • 2012年2月1日将是032
  • 2012年12月31日将是366(闰年)
  • 2011年12月31日将是365

4 个答案:

答案 0 :(得分:23)

不,你可以使用DateTime.DayOfYear。ToString(“000”);

您的示例:

new DateTime(2012, 1, 1).DayOfYear.ToString("000");
new DateTime(2012, 2, 1).DayOfYear.ToString("000");
new DateTime(2012, 12, 31).DayOfYear.ToString("000");
new DateTime(2011, 12, 31).DayOfYear.ToString("000");

答案 1 :(得分:1)

没有;那不是listed 遗憾。

答案 2 :(得分:0)

我需要一种方法来允许用户提供可以处理一年中某一天的格式,然后我想出了以下代码。

public static string FormatDate(this DateTime date, string format)
{
    var builder = new StringBuilder();
    int numOfjs = 0;
    bool escaped = false;
    foreach (char c in format)
    {
        if (c == 'j' && !escaped)
        {
            numOfjs++;
        }
        else
        {
            if (c == 'j' && escaped)
            {
                builder.Remove(builder.Length - 1, 1);
            }

            if (numOfjs > 0)
            {
                var dayOfYearFormat = new string('0', Math.Min(3, numOfjs));
                builder.Append(date.DayOfYear.ToString(dayOfYearFormat));
            }

            numOfjs = 0;
            builder.Append(c);
        }

        escaped = c == '\\' && !escaped;
    }

    if (numOfjs > 0)
    {
        var dayOfYearFormat = new string('0', Math.Min(3, numOfjs));
        builder.Append(date.DayOfYear.ToString(dayOfYearFormat));
    }

    return date.ToString(builder.ToString());
}

这使您可以使用一种格式替换连续的未分隔字母j与一年中的某一天。根据j的数量,它将零填充最多3位数。超过3连续的j就像3一样。

它基本上重写了格式,用j替换分隔的j,用一年中的连续j替换j。然后,它将此新格式传递给DateTime.ToString()

答案 3 :(得分:0)

我知道这有点旧,但是如果你绝对肯定地必须在一行代码中执行它而无法访问DateTime.DayOfYear函数(就像我今天必须做的那样):

int myDay = floor(Now() - Date(parseInt(Now().ToString("yyyy")), 1, 1)) + 1;