Так что нехай будет.
using System;
using System.Globalization;
namespace strfrmt
{
class Program
{
static void Main(string[] args)
{
// дата и время
Console.WriteLine("{0:dd.MM.yyyy HH:mm:ss dddd (ddd) MMMM (MMM)}", DateTime.Now);
// 28.06.2012 11:40:48 четверг (Чт) Июнь (июн)
// пользовательское форматирование даты
Console.WriteLine(string.Format(new HumanDateFormatProvider(), "{0,20:Hdt}", DateTime.Now));
// Сегодня 11:40:48
Console.WriteLine(string.Format(new HumanDateFormatProvider(), "{0,20:Hdt}", DateTime.Now.AddDays(-1)));
// Вчера 11:40:48
Console.WriteLine(string.Format(new HumanDateFormatProvider(), "{0,20:Hdt}", DateTime.Now.AddDays(-2)));
// 26.06.2012 11:40:48
// принудительные + и -
Console.WriteLine("{0:+0.0;-0.0} {1:+000.000;-000.000}", 1.48, -24.0);
// +1,5 -024,000
// заданное количество знаков до и после десятичной точки
Console.WriteLine("'{0:0.}' '{0:000.0}' '{0:F0}' '{0,-9:F3}', '{0,7:F2}'", 80.49);
// '80' '080,5' '80' '80,490 ', ' 80,49'
// проценты
Console.WriteLine("'{0:P}' '{0:P0}' '{0:P1}', '{0,5:P0}', '{0,-5:P0}'", 0.8069);
// '80,69%' '81%' '80,7%', ' 81%', '81% '
// заданное количество знаков
Console.WriteLine("'{0,5:D}' '{1:D5}' '{2:00000}'", 25, -12, -32);
// ' 25' '-00012' '-00032'
Console.WriteLine("'{0,-5:D}', '{1,10}' '{1,-10}', 0x{2:X8}", 33, "test1", 123456);
// '33 ', ' test1' 'test1 ', 0x0001E240
// форматирование заместителями
Console.WriteLine("{0:(#) ### ###}, '{1:###:###:###:###:###}', '{2:### ###.##}'", 1234567890, -25, 1235.456);
// (1234) 567 890, '-::::25', '1 235,46'
Console.WriteLine("{0:(0) 000 000}, '{1:000:000:000:000:000}'", 1234567890, -25);
// (1234) 567 890, '-000:000:000:000:025'
// пользовательское форматирование (тройки, разделенные пробелами)
Console.WriteLine(string.Format(new TriplexFormatProvider(), "{0:Tx} | {1:Tx}", 1234567890, -25));
// 1 234 567 890 | -25
// в системных деньгах
Console.WriteLine("{0:C}", 99.98);
// 99,98р.
// в указанных деньгах
Console.WriteLine(string.Format(CultureInfo.CreateSpecificCulture("en-US").NumberFormat, "{0:C}", 99.99 ));
// $99.99
Console.WriteLine(string.Format(CultureInfo.CreateSpecificCulture("ru-RU").NumberFormat, "{0:C}", 99.99));
// 99,99р
// принудительная замена десятичного разделителя на точку
var NFI = new CultureInfo(CultureInfo.CurrentCulture.LCID).NumberFormat;
NFI.NumberDecimalSeparator = ".";
Console.WriteLine(string.Format(NFI, "{0} {1}", 1.48, -24.01));
// 1.48 -24.01
Console.ReadLine();
}
}
// замена даты на Вчера/Сегодня/Завтра
public class HumanDateFormatProvider : IFormatProvider, ICustomFormatter
{
private static readonly string formatCode = "Hdt";
public object GetFormat(Type formatType)
{
if (formatType == typeof(ICustomFormatter))
return this;
else
return null;
}
public string Format(string format, object arg, IFormatProvider formatProvider)
{
if (format == null || !format.StartsWith(formatCode))
{
if (arg is IFormattable)
return ((IFormattable)arg).ToString(format, formatProvider);
else
return arg.ToString();
}
if (arg.GetType() == typeof(DateTime))
{
DateTime dt = (DateTime)arg;
Int64 onedayticks = 864000000000;
DateTime nowdt = DateTime.Now;
Int64 deltaticks = nowdt.Ticks - dt.Ticks;
if (Math.Abs(deltaticks) < onedayticks * 2)
{
if (nowdt.Day == dt.Day)
return string.Format("Сегодня {0:HH:mm:ss}", dt);
else
{
if (deltaticks >= 0 && dt.Day == nowdt.AddDays(-1).Day)
return string.Format("Вчера {0:HH:mm:ss}", dt);
else
{
if (deltaticks < 0 && dt.Day == nowdt.AddDays(1).Day)
return string.Format("Завтра {0:HH:mm:ss}", dt);
else
return string.Format("{0:dd.MM.yyyy HH:mm:ss}", dt);
}
}
}
else
return string.Format("{0:dd.MM.yyyy HH:mm:ss}", dt);
}
else
return arg.ToString();
}
}
// разбиение длинных чисел на тройки разделенные пробелами
// для улучшения читабельности
public class TriplexFormatProvider : IFormatProvider, ICustomFormatter
{
private static readonly string formatCode = "Tx";
public object GetFormat(Type formatType)
{
if (formatType == typeof(ICustomFormatter))
return this;
else
return null;
}
public string Format(string format, object arg, IFormatProvider formatProvider)
{
if (format == null || !format.StartsWith(formatCode))
{
if (arg is IFormattable)
return ((IFormattable)arg).ToString(format, formatProvider);
else
return arg.ToString();
}
string s = arg.ToString();
if (arg.GetType() == typeof(int) ||
arg.GetType() == typeof(long) ||
arg.GetType() == typeof(short) ||
arg.GetType() == typeof(Int64) ||
arg.GetType() == typeof(uint) ||
arg.GetType() == typeof(ulong) ||
arg.GetType() == typeof(ushort) ||
arg.GetType() == typeof(UInt64))
{
for (int i = s.Length - 3; i >= 0; i = i - 3)
s = s.Insert(i, " ");
}
return s;
}
}
}
Комментариев нет:
Отправить комментарий