andrew4582

DateFormatter - ICustomFormatter

Mar 31st, 2011
371
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.91 KB | None | 0 0
  1. public void Formatting_test() {
  2.            
  3.             Console.WriteLine(string.Format(MyDateFormatter.Create(),"Today's date      [ds]  ->  {0,-20:ds}",DateTime.Now));
  4.  
  5.             Console.WriteLine(string.Format(MyDateFormatter.Create(),"Today's file date [ddf] ->  {0,-60:ddf}",DateTime.Now));
  6.             Console.WriteLine(string.Format(MyDateFormatter.Create(),"Today's file time [ddb] ->  {0,-60:ddb}",DateTime.Now));
  7.  
  8.             Console.WriteLine(string.Format(MyDateFormatter.Create(),"Today's file date [fd]  ->  {0,-60:fd}",DateTime.Now));
  9.             Console.WriteLine(string.Format(MyDateFormatter.Create(),"Today's file time [ft]  ->  {0,-60:ft}",DateTime.Now));
  10.         }
  11.  
  12.         public class MyDateFormatter:IFormatProvider,ICustomFormatter {
  13.             public static MyDateFormatter Create() {
  14.                 return new MyDateFormatter();
  15.             }
  16.             IFormatProvider _parent;   // Allows consumers to chain format providers
  17.  
  18.             public MyDateFormatter() : this(CultureInfo.CurrentCulture) { }
  19.  
  20.             public MyDateFormatter(IFormatProvider parent) {
  21.                 _parent = parent;
  22.             }
  23.  
  24.             public object GetFormat(Type formatType) {
  25.                 if(formatType == typeof(ICustomFormatter))
  26.                     return this;
  27.                 return null;
  28.             }
  29.  
  30.             public string Format(string format,object arg,IFormatProvider formatProvider) {
  31.                
  32.                 bool ignore = false;
  33.                 string[] tokens = new string[] {"ds","ddf","ddb","fd","ft" };
  34.                 string formatLowered = format.ToLowerInvariant();
  35.  
  36.                 if(arg == null)
  37.                     ignore = true;
  38.                 else {
  39.                     if(!tokens.Contains(formatLowered))
  40.                         ignore = true;
  41.                 }
  42.                
  43.                 DateTime dtarget = DateTime.MinValue;
  44.  
  45.                 if(!ignore) {
  46.                    
  47.                     if(arg is DateTime)
  48.                         dtarget = Convert.ToDateTime(arg);
  49.                     else {
  50.                         if(!DateTime.TryParse(arg.ToString(),out dtarget))
  51.                             ignore = true;
  52.                     }
  53.                 }
  54.                 if(ignore)
  55.                     return string.Format(_parent,"{0:" + (format == "" ? "D": format) + "}",arg);
  56.                
  57.                 if(formatLowered == "ds") {
  58.                     return dtarget.ToShortDateString();
  59.                 }
  60.                 else if(formatLowered == "ddf" || formatLowered == "fd") {
  61.                     //"Mar31_2011";
  62.                     return dtarget.ToString("MMMdd_yyyy");
  63.                 }
  64.                 else if(formatLowered == "ddb" || formatLowered == "ft") {
  65.                     return dtarget.ToString("MMM_d_yyyy_hmmtt");
  66.                 }
  67.  
  68.                 return dtarget.ToString();
  69.  
  70.             }
  71.         }
Advertisement
Add Comment
Please, Sign In to add comment