2012-03-09 91 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