日期时间格式一年中的某一天

本文关键字:一年 某一天 时间 格式 日期 | 更新日期: 2023-09-27 18:27:28

DateTime.ToString(")是否有一个格式值,可以用三位数指定一年中的哪一天?

例如:

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

日期时间格式一年中的某一天

否,您可以使用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");

否;没有列出
很抱歉

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

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替换为一年中的某一天。然后,它将这个新格式传递给DateTime.ToString()

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

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