【设置系统时间】

有个业务需求是需要同步两台电脑的系统时间,准确性没有要求很高,只需要秒级,所以我就是用UDP进行同步系统时间。

主要原理就是通过调用kernel32动态库中的SetSystemTime方法可以设置系统时间。

不过这个方法需要你的程序具有管理员权限。
关于管理员权限,你只需要在你的可执行程序的【兼容性】选项卡中 勾选 【以管理员身份运行此程序】。

    [DllImport("kernel32.dll",CharSet =CharSet.Ansi)]
    public extern static bool SetSystemTime(ref SYSTEMTIME time);



    [StructLayout(LayoutKind.Sequential)]
    public struct SYSTEMTIME
    {
        public short Year;
        public short Month;
        public short DayOfWeek;
        public short Day;
        public short Hour;
        public short Minute;
        public short Second;
        public short Miliseconds;
    }
    /// <summary>
    /// 将时间戳转换为DateTime对象(秒级)
    /// </summary>
    public static DateTime ConvertTimestampToDateTime(long timestamp) 
    {
        return DateTimeOffset.FromUnixTimeSeconds(timestamp).ToLocalTime().DateTime;
    }



    public DateTime SetTime(long stamp) 
    {
                DateTime dateTime= ConvertTimestampToDateTime((long)(stamp/1000));
                SYSTEMTIME time = new SYSTEMTIME() ;
                time.Year = (short)dateTime.Year;
                time.Month = (short)dateTime.Month;
                time.Day = (short)dateTime.Day;
                time.DayOfWeek = (short)dateTime.DayOfWeek;
                time.Hour = (short)(dateTime.Hour-8);
                time.Minute = (short)dateTime.Minute;
                time.Second = (short)dateTime.Second;
                time.Miliseconds = (short)dateTime.Millisecond;

                var a = SetSystemTime(ref time);
    }
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值