[WPF][C#]PCの日付時刻を更新する方法

C#でPCのシステム時刻を更新する方法を紹介します。

C#ではVisual Basic用のDateAndTimeモジュールを使用することで簡単に日付時刻が更新できます。

コード

ViewModel

using Prism.Commands;
using Prism.Mvvm;
using System;

namespace DateTimeUpdate
{
    class MainWindowViewModel : BindableBase
    {
        public int Year
        {
            get { return year; }
            set { SetProperty(ref year, value); }
        }
        private int year = 2019;

        public int Month
        {
            get { return month; }
            set { SetProperty(ref month, value); }
        }
        private int month = 10;

        public int Day
        {
            get { return day; }
            set { SetProperty(ref day, value); }
        }
        private int day = 24;

        public int Hour
        {
            get { return hour; }
            set { SetProperty(ref hour, value); }
        }
        private int hour = 15;

        public int Minute
        {
            get { return minute; }
            set { SetProperty(ref minute, value); }
        }
        private int minute = 40;

        public int Second
        {
            get { return second; }
            set { SetProperty(ref second, value); }
        }
        private int second = 10;

        public DelegateCommand DateTimeUpdate
        {
            get
            {
                dateTimeUpdate = dateTimeUpdate ?? new DelegateCommand(() =>
                {
                    var dateTime = new DateTime(Year, Month, Day, Hour, Minute, Second);
                    // 時刻を更新
                    Microsoft.VisualBasic.DateAndTime.TimeOfDay = dateTime;
                    // 日付を更新
                    Microsoft.VisualBasic.DateAndTime.Today = dateTime;
                });
                return dateTimeUpdate;
            }
        }
        private DelegateCommand dateTimeUpdate;
    }
}

View

<Window x:Class="DateTimeUpdate.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:vm="clr-namespace:DateTimeUpdate"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">

    <Window.DataContext>
        <vm:MainWindowViewModel/>
    </Window.DataContext>

    <ScrollViewer >
        <StackPanel>
            <StackPanel Orientation="Horizontal">
                <TextBox Width="80" Text="{Binding Year}"/>
                <TextBlock Text="年"/>
                <TextBox Width="40" Text="{Binding Month}"/>
                <TextBlock Text="月"/>
                <TextBox Width="40" Text="{Binding Day}"/>
                <TextBlock Text="日"/>
                <TextBox Width="40" Text="{Binding Hour}"/>
                <TextBlock Text="時"/>
                <TextBox Width="40" Text="{Binding Minute}"/>
                <TextBlock Text="分"/>
                <TextBox Width="40" Text="{Binding Second}"/>
                <TextBlock Text="秒"/>
            </StackPanel>
            <Button Content="時刻更新" Margin="5" Command="{Binding DateTimeUpdate}" />
        </StackPanel>
    </ScrollViewer>
</Window>

VisualBasic DateAndTimeを参照する

プロジェクトにVisualBasicを参照するように設定変更しないと時刻更新が行えません。以下の方法で参照するようにします。

プロジェクトを右クリックし、「追加」-「参照」と選択します。

以下のような画面が表示されるので、Microsoft.VisualBasicを選択し「OK」を選択します。これでDateAndTimeモジュールが使用できるようになります。

注意点

私はWindows10の環境で作業をしているのですが、Visual Studioからデバッグで実行しようとするとシステム時刻を設定するためのセキュリティ アクセス許可が十分ではありません。というエラーが発生します。

これを解決する場合、exeファイルを右クリックして「管理者として実行」を選択します。そうすることでエラーが発生しなくなりました。

このエラーはWindows Vista以降で導入されたUAC(ユーザーアカウント制御)の影響みたいです。解決方法としては「管理者として実行」やUACの無効化などがあるようです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA