Potrzebowałem sposobu, aby umożliwić użytkownikom nadanie formatu, który poradziłby sobie z dniem w roku i wymyśliłem następujący kod.
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());
}
Pozwala to na posiadanie formatu, który zastąpi kolejne nieprzypisane litery j do dnia roku. Zeruje pad do 3 cyfr na podstawie liczby j. Więcej niż 3 następujące po sobie j, jak tylko 3.
Zasadniczo przepisuje format, aby zastąpić wyodrębnione j, j i kolejne j w dniu roku. Następnie przekazuje ten nowy format do DateTime.ToString()
.
porażka , ale to jest prawie tak dobre dzięki. – Dismissile
Napisałeś tak szybko. -) –