2012-03-09 78 views
7

DateTime.ToString(“”)是否有一个格式值,以三位数字指定一年中的哪一天?DateTime格式日期

例如:

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

回答

21

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

无赖,但这几乎同样值得感谢。 – Dismissile 2012-03-09 19:58:36

+0

你输入得太快了。 - ) – 2012-03-09 19:59:04

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代表一年中的某一天。然后它将这种新格式传递给DateTime.ToString()

0

我知道这是有点老了,但如果你绝对,肯定,必须这样做,在一行代码无需访问DateTime.DayOfYear功能(像我今天做):

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

我很好奇你的用例是你a)必须在一行代码中完成的,b)没有DayOfYear – Dismissile 2017-07-07 12:07:00

+0

用户端脚本,MS Access风格。是的,当我编写脚本处理程序时,我可能已经进入并添加了我们甚至没有意识到的功能,但是随后我们不得不重新编译和测试,并为客户提供新的构建,并浪费了更多的时间时间和客户的时间来构建一个用户案例,这个案例在十年左右的时间里从未出现过,但如果我们可以使用已经提供的功能,那么它会更好。 – Trevortni 2017-07-07 15:42:10