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. CSS综合复习笔记 01
  2. 查看linux端口对应的进程id
  3. 转:c# 安装包制作
  4. 【kmp】POJ-3461 Oulipo
  5. 算法:用Java实现一个mini布隆过滤器(BloomFilter)
  6. 数据治理平台对比及atlas的安装和介绍
  7. 深度学习教程(15) | 自然语言处理与词嵌入(吴恩达·完整版)
  8. 创业有感-表达能力很关键
  9. 黑马C++笔记——STL常用算法
  10. maven打包失败解决方案
  11. python实现之一阶二阶导数
  12. 摩根大通区块链支付网络计划于1月日本启动
  13. 深度学习 一 :使用BERT做 NLP分类任务
  14. 王者qq服务器能和微信一起吗,王者荣耀微信和qq能一起玩吗 qq和微信数据互通吗...
  15. 超越 ConvNeXt、RepLKNet | 看 51×51 卷积核如何破万卷!
  16. 编程方法论/架构设计/模式相关转载链接汇总
  17. 优恩|TVS管选型注意参数|如何快速选择TVS管
  18. 关于Powerlink和EtherCAT的对比
  19. 找工作经历(供参考)
  20. 中国物流集团携手用友启动ERP暨财务共享建设项目

热门文章

  1. java纯数字正则表达式_java正则表达式匹配所有数字的案例
  2. deepfacelab安卓版_Deepfacelab下载
  3. DeepFaceLab:手动提取高精度脸图,减少抖动!
  4. 你对自己未来五年的职业规划是什么
  5. C语言除法运算符“/”和求余运算符“%”
  6. 【gloomyfish】【原创】数据分析之 – 散点图
  7. 相关系数excel_excel函数利用CORREL函数FORECAST函数根据现有数据预测未来数据
  8. phpstudy使用教程(一)
  9. linux系统实现TTS(文字转语音)功能
  10. 智能时代如何构建金融反欺诈体系?