DateTime.ToString(“”)是否有一个格式值,以三位数字指定一年中的哪一天?DateTime格式日期
例如:
- 2012年1月1日将是001
- 2012年2月1日将是032
- 2012年12月31日将是366(闰年)
- 12月31日, 2011将是365
DateTime.ToString(“”)是否有一个格式值,以三位数字指定一年中的哪一天?DateTime格式日期
例如:
不,您可以使用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");
否;那不是listed。
对不起。
我需要一种方法来允许用户提供一种可以处理一年中某天的格式,并且我提出了以下代码。
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;
我很好奇你的用例是你a)必须在一行代码中完成的,b)没有DayOfYear – Dismissile 2017-07-07 12:07:00
用户端脚本,MS Access风格。是的,当我编写脚本处理程序时,我可能已经进入并添加了我们甚至没有意识到的功能,但是随后我们不得不重新编译和测试,并为客户提供新的构建,并浪费了更多的时间时间和客户的时间来构建一个用户案例,这个案例在十年左右的时间里从未出现过,但如果我们可以使用已经提供的功能,那么它会更好。 – Trevortni 2017-07-07 15:42:10
无赖,但这几乎同样值得感谢。 – Dismissile 2012-03-09 19:58:36
你输入得太快了。 - ) – 2012-03-09 19:59:04