Friday, November 20, 2009

String Format for DateTime [C#]



c# Examples


Menu:















String Format for DateTime [C#]



This example shows how to format DateTime
using String.Format
method. All formatting can be done also using DateTime.ToString
method.



Custom DateTime Formatting



There are following custom format specifiers y (year),
M (month), d (day), h (hour 12),
H (hour 24), m (minute), s (second),
f (second fraction), F (second fraction, trailing
zeroes are trimmed), t (P.M or A.M) and z
(time zone).



Following examples demonstrate how are the format specifiers rewritten to the
output.


[C#]



// create date time 2008-03-09 16:05:07.123
DateTime dt = new DateTime(2008, 3, 9, 16, 5, 7, 123);

String.Format("{0:y yy yyy yyyy}", dt); // "8 08 008 2008" year
String.Format("{0:M MM MMM MMMM}", dt); // "3 03 Mar March" month
String.Format("{0:d dd ddd dddd}", dt); // "9 09 Sun Sunday" day
String.Format("{0:h hh H HH}", dt); // "4 04 16 16" hour 12/24
String.Format("{0:m mm}", dt); // "5 05" minute
String.Format("{0:s ss}", dt); // "7 07" second
String.Format("{0:f ff fff ffff}", dt); // "1 12 123 1230" sec.fraction
String.Format("{0:F FF FFF FFFF}", dt); // "1 12 123 123" without zeroes
String.Format("{0:t tt}", dt); // "P PM" A.M. or P.M.
String.Format("{0:z zz zzz}", dt); // "-6 -06 -06:00" time zone



You can use also date separator / (slash) and
time sepatator : (colon). These characters will be
rewritten to characters defined in the current DateTimeForma­tInfo.DateSepa­rator
and DateTimeForma­tInfo.TimeSepa­rator.


[C#]



// date separator in german culture is "." (so "/" changes to ".")
String.Format("{0:d/M/yyyy HH:mm:ss}", dt); // "9/3/2008 16:05:07" - english (en-US)
String.Format("{0:d/M/yyyy HH:mm:ss}", dt); // "9.3.2008 16:05:07" - german (de-DE)



Here are some examples of custom date and time formatting:


[C#]



// month/day numbers without/with leading zeroes
String.Format("{0:M/d/yyyy}", dt); // "3/9/2008"
String.Format("{0:MM/dd/yyyy}", dt); // "03/09/2008"

// day/month names
String.Format("{0:ddd, MMM d, yyyy}", dt); // "Sun, Mar 9, 2008"
String.Format("{0:dddd, MMMM d, yyyy}", dt); // "Sunday, March 9, 2008"

// two/four digit year
String.Format("{0:MM/dd/yy}", dt); // "03/09/08"
String.Format("{0:MM/dd/yyyy}", dt); // "03/09/2008"



Standard DateTime Formatting



In DateTimeForma­tInfo
there are defined standard patterns for the current culture. For example
property ShortTimePattern
is string that contains value h:mm tt for en-US
culture and value HH:mm for de-DE culture.



Following table shows patterns defined in DateTimeForma­tInfo
and their values for en-US culture. First column contains format specifiers for
the String.Format
method.



























































































































Specifier DateTimeFormatInfo property Pattern value (for en-US culture)
t ShortTimePattern h:mm tt
d ShortDatePattern M/d/yyyy
T LongTimePattern h:mm:ss tt
D LongDatePattern dddd, MMMM dd, yyyy
f (combination of D and t) dddd, MMMM dd, yyyy h:mm tt
F FullDateTimePattern dddd, MMMM dd, yyyy h:mm:ss tt
g (combination of d and t) M/d/yyyy h:mm tt
G (combination of d and T) M/d/yyyy h:mm:ss tt
m, M MonthDayPattern MMMM dd
y, Y YearMonthPattern MMMM, yyyy
r, R RFC1123Pattern ddd, dd MMM yyyy HH':'mm':'ss 'GMT' (*)
s SortableDateTi­mePattern yyyy'-'MM'-'dd'T'HH':'mm':'ss (*)
u UniversalSorta­bleDateTimePat­tern yyyy'-'MM'-'dd HH':'mm':'ss'Z' (*)
(*) = culture independent


Following examples show usage of standard format specifiers
in String.Format
method and the resulting output.


[C#]



String.Format("{0:t}", dt); // "4:05 PM" ShortTime
String.Format("{0:d}", dt); // "3/9/2008" ShortDate
String.Format("{0:T}", dt); // "4:05:07 PM" LongTime
String.Format("{0:D}", dt); // "Sunday, March 09, 2008" LongDate
String.Format("{0:f}", dt); // "Sunday, March 09, 2008 4:05 PM" LongDate+ShortTime
String.Format("{0:F}", dt); // "Sunday, March 09, 2008 4:05:07 PM" FullDateTime
String.Format("{0:g}", dt); // "3/9/2008 4:05 PM" ShortDate+ShortTime
String.Format("{0:G}", dt); // "3/9/2008 4:05:07 PM" ShortDate+LongTime
String.Format("{0:m}", dt); // "March 09" MonthDay
String.Format("{0:y}", dt); // "March, 2008" YearMonth
String.Format("{0:r}", dt); // "Sun, 09 Mar 2008 16:05:07 GMT" RFC1123
String.Format("{0:s}", dt); // "2008-03-09T16:05:07" SortableDateTime
String.Format("{0:u}", dt); // "2008-03-09 16:05:07Z" UniversalSortableDateTime



See also







By Jan Slama, 25-Mar-2008














WPF Timer (DispatcherTimer)


This article discusses the WPF DispatcherTimer.

Most of us are from a background of C# (or VB.Net). You must have some point of time come across a scenario for performing a repetitive GUI operation after certain period of time. The solution in most cases has been the WinForm's Timer.

What about WPF ? Does it have a Timer ?

WPF no different to WinForm has it's own Timer equivalent. It is called DispatcherTimer. There are other options to get the Timer behavior but one of the most efficient for a Window based operation is the DispatcherTimer.

I have attached a sample Timer application demonstrating the functionality.

The window has a "Start timer" and "Stop timer" functionality. There is an input TextBox which takes the Timer frequency in milliseconds.

Just enter the Timer frequency in millisecond and hit the "Start timer" button. There is a status bar which displays the status of the time. At start it will be blank. When you start the Timer it will display the current Time and when you stop the Timer it will display the "Stopped" status.

Let us discuss the code to look into how we use it.

XAML,
< Window x:Class="TimerSample.Window1"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   Title="Timer" Height="148" Width="300" ResizeMode="NoResize" WindowStartupLocation="CenterScreen">
   
       
           
           1000
           
       
       
           
           
       
       Not working
   



Code behind,


public partial class Window1 : Window
{
   DispatcherTimer _timer;

   public Window1()
   {
       InitializeComponent();

       _timer = new DispatcherTimer();
       _timer.Tick += new EventHandler(delegate(object s, EventArgs a)
       {
           status.Text = "Started: " + DateTime.Now;
           //MessageBox.Show("Dummy message"); //notify timer end
           //this.Close(); //close application
       });
   }

   private void Start_Click(object sender, RoutedEventArgs e)
   {
       // Set the Interval
       _timer.Interval = TimeSpan.FromMilliseconds(Convert.ToDouble(time.Text));

       // Start the timer
       _timer.Start();

       status.Text = "Started";
   }

   private void Stop_Click(object sender, RoutedEventArgs e)
   {
       // Stop the timer
       _timer.Stop();

       status.Text = "Stopped";
   }
}


We have a local variable of type DispatcherTimer - _timer. We manipulate this variable to start and stop the timer. At start we initialize the variable with an Event delegate to fire whenever the Timer ticks.


_timer.Tick += new EventHandler(delegate(object s, EventArgs a)
       {
           status.Text = "Started: " + DateTime.Now;
           //MessageBox.Show("Dummy message"); //notify timer end
           //this.Close(); //close application
       });


I have specifically left the commented lines to show the different possibilities that can be done in the Event delegate. Whenever the Timer ticks the event is fired and Status bar is updated with the most recent DateTime.

DispatcerTimer runs on the UI thread and hence does not need marshaling back and forth as we have to do in the normal cases of a Thread.

Have fun.

For details click here.