1. 修改系统时间的Windows API

[DllImport("Kernel32.dll")]
public static extern void GetLocalTime(ref SystemTime lpSystemTime);[DllImport("Kernel32.dll")]
public static extern bool SetLocalTime(ref SystemTime lpSystemTime);[DllImport("Kernel32.dll")]
public static extern void GetSystemTime(ref SystemTime lpSystemTime);[DllImport("Kernel32.dll")]
public static extern bool SetSystemTime(ref SystemTime lpSystemTime);

注:

① 前两个API为获取本地时间和设置本地时间,后两个API为获取系统时间和设置系统时间。

② 其区别在于系统时间为UTC时间,本地时间为我们在计算机上实际看到的时间。

③ 若计算机的时区设置为中国,则本地时间就是北京时间,其与系统时间相差8个小时。

2. 相关结构struct类型

[StructLayout(LayoutKind.Sequential)]
struct SystemTime
{[MarshalAs(UnmanagedType.U2)]internal ushort year; // 年[MarshalAs(UnmanagedType.U2)]internal ushort month; // 月[MarshalAs(UnmanagedType.U2)]internal ushort dayOfWeek; // 星期[MarshalAs(UnmanagedType.U2)]internal ushort day; // 日[MarshalAs(UnmanagedType.U2)]internal ushort hour; // 时[MarshalAs(UnmanagedType.U2)]internal ushort minute; // 分[MarshalAs(UnmanagedType.U2)]internal ushort second; // 秒[MarshalAs(UnmanagedType.U2)]internal ushort milliseconds; // 毫秒
}

3. 调用Windows API实现本地/系统时间的获取与修改

/// <summary>
/// 获取本地时间
/// </summary>
/// <returns></returns>
public DateTime getLocalTime()
{SystemTime sysTime = new SystemTime();GetLocalTime(ref sysTime);return SystemTime2DateTime(sysTime);
}/// <summary>
/// 设置本地时间
/// </summary>
/// <param name="dateTime"></param>
/// <returns></returns>
public bool setLocalTime(DateTime dateTime)
{if (grantPrivilege(SE_SYSTEMTIME_NAME)){// 授权成功SystemTime sysTime = DateTime2SystemTime(dateTime);bool success = SetLocalTime(ref sysTime);if (!revokePrivilege(SE_SYSTEMTIME_NAME)){// 撤权失败}return success;}// 授权失败return false;
}/// <summary>
/// 获取系统时间
/// </summary>
/// <returns></returns>
public DateTime getSystemTime()
{SystemTime sysTime = new SystemTime();GetSystemTime(ref sysTime);return SystemTime2DateTime(sysTime);
}/// <summary>
/// 设置系统时间(UTC)
/// </summary>
/// <param name="dateTime"></param>
/// <returns></returns>
public bool setSystemTime(DateTime dateTime)
{if (grantPrivilege(SE_SYSTEMTIME_NAME)){// 授权成功SystemTime sysTime = DateTime2SystemTime(dateTime);bool success = SetSystemTime(ref sysTime);if (!revokePrivilege(SE_SYSTEMTIME_NAME)){// 撤权失败}return success;}// 授权失败return false;
}/// <summary>
/// 将SystemTime转换为DateTime
/// </summary>
/// <param name="sysTime"></param>
/// <returns></returns>
public DateTime SystemTime2DateTime(SystemTime sysTime)
{return new DateTime(sysTime.year, sysTime.month, sysTime.day, sysTime.hour, sysTime.minute, sysTime.second, sysTime.milliseconds);
}/// <summary>
/// 将DateTime转换为SystemTime
/// </summary>
/// <param name="dateTime"></param>
/// <returns></returns>
public SystemTime DateTime2SystemTime(DateTime dateTime)
{SystemTime sysTime = new SystemTime();sysTime.year = Convert.ToUInt16(dateTime.Year);sysTime.month = Convert.ToUInt16(dateTime.Month);sysTime.day = Convert.ToUInt16(dateTime.Day);sysTime.hour = Convert.ToUInt16(dateTime.Hour);sysTime.minute = Convert.ToUInt16(dateTime.Minute);sysTime.second = Convert.ToUInt16(dateTime.Second);sysTime.milliseconds = Convert.ToUInt16(dateTime.Millisecond);return sysTime;
}

4. 自动同步本地时间

从NTP服务器获取时间,并自动修改本地时间,即可以实现自动同步本地时间。关于如何从NTP服务器获取时间,可以参考:从NTP服务器获取时间(C#)

5. 注意事项:

① 上述代码中的grantPrivilege(SE_SYSTEMTIME_NAME)和revokePrivilege(SE_SYSTEMTIME_NAME)用于授予/撤销进程修改时间的权限,这里没有给出具体的代码;

② 可以参考子丰的博文:点击打开链接

③ 也可以直接下载代码:点击打开链接

④ 也可以直接删除上面授权和撤权的代码,以管理员身份运行程序也能修改时间。

C#修改Windows系统时间相关推荐

  1. c语言修改windows系统时间,c语言实现系统时间校正工具代码分享

    //******************************************************************* //Time Protocol是一种非常简单的应用层协议.它 ...

  2. C# 修改windows系统时间

    由于软件系统需要与MES做数据对接,设备电脑时间与MES端有相差,而采集数据的时间需要做到统一.当然不建议修改本机系统的时间,如需与mes时间一致,建议软件项目使用自身时间.由于开发软件受限,当然更多 ...

  3. 黑苹果与Windows系统时间不同步的解决办法

    文章目录[隐藏] 问题描述 修复方法 摘要 安装完黑苹果后重启进入Windows发现时间跟OS X系统下不一样,总是慢八小时,最后在猫叔博客看到是因为两个系统看到硬件时间的方式不一样所造成的,wind ...

  4. Windows系统时间(FILETIME和SYSTEMTIME)

    转载请标明出处,原文地址:http://blog.csdn.net/morewindows/article/details/8654298 欢迎关注微博:http://weibo.com/MoreWi ...

  5. Windows系统时间 FILETIME和SYSTEMTIME

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 转载请标 ...

  6. 修改linux系统时间的方法(date命令)

    修改linux系统时间的方法(date命令) 来源:互联网 作者:佚名 时间:11-18 23:22:27 [大 中 小] date命令不仅可以显示系统当前时间,还可以用它来修改系统时间,下面简单的介 ...

  7. 黑苹果双系统时间不一致_黑苹果与Windows系统时间不对(不同步)的解决办法...

    唠叨 经过我一番蒸腾,终于把系统给上好了,目前还缺个WiFi,等着把网卡淘回来换上就可以完美支持WiFi,隔空投送,以及苹果的各个功能. 先上个电脑配置吧,我的是机械革命深海幽灵z2air-s.这是我 ...

  8. Windows系统时间不准问题

    Windows系统时间不准问题 ##Windows系统时间 Windows系统时间在关机时时靠主板电池维持的,维持Windows时间猪花费很少的电量,一般几年之内不会没电,不过也不是绝对的. ##Wi ...

  9. winserver修改计算机用户名,如何修改Windows系统的管理员账户名

    下面给大家分享的是如何彻底完美的实现修改Windows系统的管理员账户名,非常的简单实用,有需要的小伙伴可以参考下. 在Windows 安装的时候会输入一个用户名,电脑店装的一般都会设置成Admin之 ...

  10. 修改Linux系统时间和时区

    服务时间显示不正确,可能有3个原因造成(数据库服务于后台服务分开时,属于俩个虚拟机): 1.数据库服务所在虚拟机的时间和时区显示正确 2.Oracle服务的的时间和时区显示正确 3.后台服务所在虚拟机 ...

最新文章

  1. 异步、作用域、闭包--setTimeout在for循环中的思考
  2. 人眼中亮斑的检测、定位和去除
  3. 在Nginx上配置NameCheap免费SSL
  4. vue 中 v-if 和 v-for 混用时应该注意的事项
  5. Java Main 如何是如何被执行的?
  6. android qq输入法表情,QQ输入法(Android)4.8 表情进行时
  7. 寻找春天nbsp;九宫格日记-2011.08.24
  8. Dataframe修改列名
  9. 7-20 约分最简分式c语言,7-24 约分最简分式
  10. 2020暨南大学计算机专硕考研经验分享
  11. ORACLE字符集为US7ASCII,插入数据,中文乱码问题解决
  12. 【C语言】求一个四位整数各位数字之和
  13. 华邦存储芯片 W25Q 系列命名规则
  14. python学习--统计序列中元素出现的频度(次数)
  15. 华为手机怎么用云歌_华为手机功能之语音助手小艺,带你了解小艺的使用方式...
  16. 键盘win键无法使用,win+r不生效、win键没反应、Windows键失灵万能解决方案
  17. Linux下十大命令行下载工具
  18. 推荐系统 | (3) 可解释推荐系统---身怀绝技,一招击中用户心理
  19. 一、什么是计算机网络
  20. 某课抓包视频 安卓手机:黄鸟+某课app+VirtualXposed虚拟框架

热门文章

  1. 这台计算机无法连接usb,爱思助手无法连接或者连接超时解决办法
  2. 《谷物大脑》笔记(初稿)
  3. SDUT 3337 计算长方体、四棱锥的表面积和体积
  4. NLP-信息抽取-NER-2019:LGN【A Lexicon-Based Graph Neural Network for Chinese NER】
  5. 麻省理工学院计算机科学与工程博士,2020美国麻省理工大学计算机科学博士专排...
  6. Office | Word中插入参考文献
  7. 泰勒展开简单直观理解与常用公式
  8. Oracle JDE计划BOM应用
  9. c语言汉字怎么编码,【C语言学习】C语言汉字编码。。。C语言中汉字的输入
  10. 微信小程序页面实现防抖