Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Create a Digital Clock with time zone application. For this WPF application crea

ID: 3533378 • Letter: C

Question

Create a Digital Clock with time zone application. For this WPF application create a window, which consists of a ComboBox control (to allow time zone selection) at the top, and a Grid area underneath, which contains a Digital Clock (to display time and data). When the user select a time zone (item) in the ComboBox, the program should automatically convert and display current time and date to a new time and date in the selected time zone by calculating and updating the time differences.

To support this program, create a dependency property called Timezone. This dependency property should be associated with a callback method called OnTimezoneChanged, which will be called by WPF whenever the value of the dependency property changes. This method should recalculate new time and date using the time zone currently returned by the Timezone property. Do not use advanced controls like Calendar Control or DatePicker Control.

Program requirements:
A. The default current time and date in a time zone (preferably your local time zone) should be selected by upon startup.
B. The Digital Clock should display the current time and date in the format: HH:MM:SS AM/PM - MM/DD/YYYY
C. The time output should be displayed in a 12-hour display format. The 24-display format is optional.
D. Presents users with at least five (5) different time zone options.

Eastern Time

Central Time: EST-1 hours

Mountain Time: EST - 2 hours

Pacific: EST-3 hours

Hawaii: EST- 6 hours

----------------------------------------------------------------------------------------------

This is what I have so far for the WPF


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Threading;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApplication3
{
   
    public partial class MainWindow : Window
    {
        public static readonly DependencyProperty Timezone;

        public DateTime ZoneProperty
        {
            get {return (DateTime) GetValue (Timezone);}
            set { SetValue(Timezone, value); }
        }

        string timeFormatString = "hh:mm:ss tt - MM/dd/yyyy";
        int tzOffset; // Tracks the Timezone offset in hours
        DateTime currentTime; // Tracks current time
        DispatcherTimer myTimer;

        static MainWindow ()
        {
            FrameworkPropertyMetadata md = new FrameworkPropertyMetadata();
            md.PropertyChangedCallback = OnTimezoneChanged;
            Timezone = DependencyProperty.Register(
                "Zone", typeof(DateTime), typeof(MainWindow), md);
        }

        public MainWindow()
        {
            InitializeComponent();


            // Get current time in UTC
            currentTime = DateTime.UtcNow;

            // Get local time zone and UTC offset
            TimeZone localZone = TimeZone.CurrentTimeZone;
            tzOffset = localZone.GetUtcOffset(DateTime.Now).Hours;

            // Initialize a timer to tick every second.
            myTimer = new DispatcherTimer();
            myTimer.Interval = new TimeSpan(0, 0, 1);
            myTimer.Tick += new EventHandler(dispatcherTimer_Tick);
            myTimer.Start();
        }

        private void zone_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            int zoneTime;
           
        }
        // Every timer tick (every second), update the clock.
        private void dispatcherTimer_Tick(object source, EventArgs e)
        {
            currentTime = DateTime.UtcNow.AddHours(tzOffset);
            Clock.Content = currentTime.ToString(timeFormatString);
        }
        static void OnTimezoneChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
        {

        }

    }


<Window x:Class="WpfApplication3.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="750">
    <StackPanel>
        <ComboBox SelectionChanged="zone_SelectionChanged">
            <ComboBoxItem Name="East">Eastern Daylight Time</ComboBoxItem>
            <ComboBoxItem Name="Central">Central Daylight Time</ComboBoxItem>
            <ComboBoxItem Name="Mountain">Mountain Daylight Time</ComboBoxItem>
            <ComboBoxItem Name="Pacific">Pacific Standard Time</ComboBoxItem>
            <ComboBoxItem Name="Hawaii">Hawaii Standard Time</ComboBoxItem>
           
        </ComboBox>
    <Grid>
        <Label Height="76" HorizontalAlignment="Center" Name="Clock" VerticalAlignment="Top" Width="700" FontSize="50" HorizontalContentAlignment="Center" Margin="42,74,18,0" Grid.ColumnSpan="3" />
    </Grid>
    </StackPanel>
</Window>


Explanation / Answer

Code: public partial class MainWindow : Window, INotifyPropertyChanged { private string _currenttime; private TimeZoneInfo _selectedTimeZone; public MainWindow() { InitializeComponent(); DispatcherTimer timer = new DispatcherTimer(DispatcherPriority.Background); timer.Interval = TimeSpan.FromSeconds(1); timer.IsEnabled = true; timer.Tick += (s, e) => { UpdateTime(); }; } public List TimeZones { get { return TimeZoneInfo.GetSystemTimeZones().ToList(); } } public string CurrentTime { get { return _currenttime; } set { _currenttime = value; OnPropertyChanged("CurrentTime"); } } public TimeZoneInfo SelectedTimeZone { get { return _selectedTimeZone; } set { _selectedTimeZone = value; OnPropertyChanged("SelectedTimeZone"); UpdateTime(); } } private void UpdateTime() { CurrentTime = SelectedTimeZone == null ? DateTime.Now.ToLongTimeString() : DateTime.UtcNow.AddHours(SelectedTimeZone.BaseUtcOffset.TotalHours).ToLongTimeString(); } public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged(string property) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(property)); } } }