|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ExampleProject.Contracts;
using System.ComponentModel;
using System.Timers;
using System.Globalization;
namespace ExampleProject.Model
{
/// <summary>
/// The TimeModel represents a model of date/time with
/// internationalization, and provides a simple implementation
/// of date/time management, with a periodic tick event
/// that notifies listeners of changes in the current time.
/// </summary>
/// <remarks>
/// <para>
/// <list>
/// <listheader>Version History</listheader>
/// <item>10 October, 2009 - Steve Gray - Initial Draft</item>
/// </list>
/// </para>
/// </remarks>
public class TimeModel : ITimeModel
{
#region Private Fields
private TimeZoneInfo _TimeZone;
private DateTime _Time;
private Timer _Timer;
#endregion
#region Constructor(s)
/// <summary>
/// Initialize the time model.
/// </summary>
public TimeModel()
{
_TimeZone = TimeZoneInfo.Local;
_Time = DateTime.Now;
_Timer = new Timer(1000);
_Timer.Elapsed += new ElapsedEventHandler(Timer_Elapsed);
_Timer.Start();
}
#endregion
#region Timer Update
/// <summary>
/// When the timer elapses, update the current time.
/// </summary>
/// <param name="sender">Sending object</param>
/// <param name="e">Event arguments</param>
void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
// Set the current time to the right internationalized time.
_Time = TimeZoneInfo.ConvertTime(DateTime.Now, _TimeZone);
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("CurrentTime"));
}
#endregion
#region ITimeModel Members
/// <summary>
/// Current time-zone
/// </summary>
public TimeZoneInfo CurrentTimezone
{
get
{
return _TimeZone;
}
set
{
if (CurrentTimezone != value)
{
_TimeZone = value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("CurrentTimezone"));
}
}
}
/// <summary>
/// Current time
/// </summary>
public DateTime CurrentTime
{
get
{
return _Time;
}
}
#endregion
#region INotifyPropertyChanged Members
/// <summary>
/// Notify listeners of property changes (using Observer pattern).
/// </summary>
public event PropertyChangedEventHandler PropertyChanged;
#endregion
#region ITimeModel Members
/// <summary>
/// List of time-zones
/// </summary>
public IEnumerable<TimeZoneInfo> AllTimeZones
{
get {
return TimeZoneInfo.GetSystemTimeZones();
}
}
#endregion
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
Steve Gray is a Senior Developer at a British insurance company, working on a popular aggregator. When he's not writing ASP .NET, it's because there's SQL or WCF to write instead.