利用C#修改Windows操作系统时间

  C#的System.DateTime类提供了对日期时间的封装,用它进行时间的转换和处理很方便,但是我没有在其中找到任何可以用来修改系统时间的成员。用过VC、VB等的朋友可能知道,我们可以调用Win32 API SetLocalTime来改变系统时间,看来C#中也只能如此了。SetLocalTime需要一个SYSTEMTIME结构指针作为参数,这倒不难,我们可以“比葫芦画瓢”很快在C#中定义这个结构,但问题是,我同时还想“享受”.NET Framework的System.DateTime在时间转换和处理方面的便利,怎么办?只有自己动手了,为我们的C#中的  SYSTEMTIME编写成员函数,实现和System.DateTime之间的互转。请看下面的代码:

  首先我为了以后调用方便,新建了一个C#类库文件,在里面把SetLocalTime API放到一个名称为Win32API的类中,并把这个类放到我自己定义的namespace中,避免名称冲突。以后我还可以不断向这个类和名称空间添加常用的API,以便构造我自己的C# Win32 API函数库。

{
  /// <summary>
  ///
  /// </summary>
  public struct SYSTEMTIME
  {
    public ushort wYear;
    public ushort wMonth;
    public ushort wDayOfWeek;
    public ushort wDay;
    public ushort wHour;
    public ushort wMinute;
    public ushort wSecond;
    public ushort wMilliseconds;

    /// <summary>
    /// 从System.DateTime转换。
    /// </summary>
    /// <param name="time">System.DateTime类型的时间。</param>
    public void FromDateTime(DateTime time)
    {
      wYear = (ushort)time.Year;
      wMonth = (ushort)time.Month;
      wDayOfWeek = (ushort)time.DayOfWeek;
      wDay = (ushort)time.Day;
      wHour = (ushort)time.Hour;
      wMinute = (ushort)time.Minute;
      wSecond = (ushort)time.Second;
      wMilliseconds = (ushort)time.Millisecond;
    }
    /// <summary>
    /// 转换为System.DateTime类型。
    /// </summary>
    /// <returns></returns>
    public DateTime ToDateTime()
    {
      return new DateTime(wYear, wMonth, wDay, wHour, wMinute, wSecond, wMilliseconds);
    }
    /// <summary>
    /// 静态方法。转换为System.DateTime类型。
    /// </summary>
    /// <param name="time">SYSTEMTIME类型的时间。</param>
    /// <returns></returns>
    public static DateTime ToDateTime(SYSTEMTIME time)
    {
      return time.ToDateTime();
    }
  }
 public class Win32API
  {
    [DllImport("Kernel32.dll")]
    public static extern bool SetLocalTime( ref SYSTEMTIME Time );
    [DllImport("Kernel32.dll")]
    public static extern void GetLocalTime(ref SYSTEMTIME Time);
  }
}

然后再需要的地方通过调用如下方法中间的核心代码来实现修改Windows操作系统时间,例如,通过Button的Click事件实现修改Windows操作系统时间:

private void button1_Click(object sender, System.EventArgs e)
{
  //取得当前系统时间
  DateTime t = DateTime.Now;
  //在当前时间上加上一周
  t = t.AddDays(7);
  //转换System.DateTime到SYSTEMTIME
  SYSTEMTIME st = new SYSTEMTIME();
  st.FromDateTime(t);
  //调用Win32 API设置系统时间
  Win32API.SetLocalTime(ref st);
  //显示当前时间
  MessageBox.Show(DateTime.Now.ToString());
}

以上就是利用C#修改Windows操作系统时间的详细内容,更多关于c# 修改系统时间的资料请关注我们其它相关文章!

(0)

相关推荐

  • C#中系统时间和UNIX时间戳互相转换

    在项目开发过程中,有时会遇到不同程序之间相互调用数据,数据中不免会包含时间,比如ASP.NET调用PHP,牵扯到时间就要做一下处理,PHP程序中一般存取的都是UNIX时间,不像ASP.NET存储的是年月日时分秒,这样就需要做一下转换,代码如下: 一.将系统时间转换成UNIX时间戳 复制代码 代码如下: DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970,1,1)); DateTime dtNow =

  • C#/.NET读取或修改文件的创建时间及修改时间详解

    前言 手工在博客中添加 Front Matter 文件头可是个相当费事儿的做法,这种事情就应该自动完成. .NET 中提供了非常方便的修改文件创建时间的方法,使用这种方法,能够帮助自动完成一部分文件头的编写或者更新. 相关类型 .NET 中提供了两个不同的设置创建和修改时间的入口: File 静态类 FileInfo 类 ▲ File 静态类的方法 ▲ FileInfo 类的方法 很明显,使用 FileInfo 类可以使用属性直接获取和赋值,用法上会比 File 方便,不过需要一个 FileIn

  • C#利用win32 Api 修改本地系统时间、获取硬盘序列号

    C#利用win32 Api 修改本地系统时间.获取硬盘序列号,可以用于软件注册机制的编写! 复制代码 代码如下: using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; namespace Fengyun {     public class Win32     {         #region 修改本地系统时间         [DllIm

  • C#简单读取、改变文件的创建、修改及访问时间的方法

    本文实例讲述了C#简单读取.改变文件的创建.修改及访问时间的方法.分享给大家供大家参考.具体如下: FileInfo fi = new FileInfo("C:\\test.txt"); Console.WriteLine(fi.CreationTime.ToString()); Console.WriteLine(fi.LastWriteTime.ToString()); Console.WriteLine(fi.LastAccessTime.ToString()); // 改变(设

  • C#中动态显示当前系统时间的实例方法

    各位亲们可以尝试以下代码: 注:这里我就只有一个html标签对来说明问题了,首部之类的东西,自己添加. 复制代码 代码如下: <html>     <head>         <title>网页中动态的显示系统日期时间</title>         <script language="JavaScript">             function startTime() {                 var to

  • C#实现在控制台输出当前系统时间的方法

    本文实例讲述了C#实现在控制台输出当前系统时间的方法.分享给大家供大家参考.具体实现方法如下: //C#实现的小控制台程序: 动态输出当前时间 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { /// <summary>

  • C# 当前系统时间获取及时间格式详解

    C# 当前系统时间获取及时间格式 最近学习C# 的知识,对获取系统时间和时间格式进行了总结,这是本文在网上整理的详细资料,大家看下! --DateTime 数字型 System.DateTime currentTime=new System.DateTime(); 取当前年月日时分秒 currentTime=System.DateTime.Now; 取当前年 int 年=currentTime.Year; 取当前月 int 月=currentTime.Month; 取当前日 int 日=curr

  • C#实现修改系统时间的方法

    本文所述C#获取和修改系统时间的实现步骤为:系统的时间从 SystemTime 结构体中取出,并显示在textBox1上,从setDate,setTime控件中获取年,月,日,小时,分钟,秒信息,存入SystemTime结构体中,然后使用SetLocalTime(ref systemTime)设置为用户指定的时间.本代码编译后会有一个易于操作的窗体. 完整功能代码如下: using System; using System.Drawing; using System.Collections; u

  • 利用C#修改Windows操作系统时间

    C#的System.DateTime类提供了对日期时间的封装,用它进行时间的转换和处理很方便,但是我没有在其中找到任何可以用来修改系统时间的成员.用过VC.VB等的朋友可能知道,我们可以调用Win32 API SetLocalTime来改变系统时间,看来C#中也只能如此了.SetLocalTime需要一个SYSTEMTIME结构指针作为参数,这倒不难,我们可以"比葫芦画瓢"很快在C#中定义这个结构,但问题是,我同时还想"享受".NET Framework的Syste

  • python修改操作系统时间的方法

    本文实例讲述了python修改操作系统时间的方法.分享给大家供大家参考.具体实现方法如下: #-*- coding:utf-8 -*- import socket import struct import time import win32api TimeServer = '210.72.145.44' #国家授时中心ip Port = 123 def getTime(): TIME_1970 = 2208988800L client = socket.socket(socket.AF_INET

  • Oracle数据库服务器修改操作系统时间的注意事项详解

    Oracle 数据库服务器修改操作系统时间的注意事项: 对单机或者ha 1.对数据库本身而言,其实是没有影响的.因为scn不依赖于os时间 2.对app(应用程序)而言,若是app中使用了sysdate之类的,那确实是有影响的. 基于这个情况,我们一般推荐:改os时间 不往之前的时间去改,而是往今后的时间去改. 推荐:安装oracle10g时候注意事项&修改oracle数据库字符集编码 [安装oracle10g时候注意事项:1. 关闭网络连接2.--修改oracle数据库字符集编码:先用syst

  • 如何使用C#修改本地Windows系统时间

    C#提升管理员权限修改本地Windows系统时间 ​在桌面应用程序开发过程中,需要对C盘下进行文件操作或者系统参数进行设置,例如在没有外网的情况下局域网内部自己的机制进行时间同步校准,这是没有管理员权限便无法进行设置. 1. 首先需要获得校准时间,两种方式: 通过可上网的电脑进行外部获取当前时间. 通过NTP实现 //NTP消息大小摘要是16字节 (RFC 2030) byte[] ntpData = new byte[48]; //设置跳跃指示器.版本号和模式值 // LI = 0 (no w

  • ubuntu系统修改时区和时间的方法

    在Linux计算机上,有两个时间,一个是硬件时间(BIOS中记录的时间,称为hwclock),另一个是操作系统时间(osclock).硬件时钟由BIOS电池供电, 当计算机关机后,会继续运行,BIOS电池一般可使用几年,如果没电了,那BIOS中的数据会恢复出厂设置. 硬件时间与操作系统时间的交互流程 1.开机时,操作系统从BIOS中读取硬件时间+时区,然后根据osclock的时区,转换为对应的时间.然后操作系统时间与硬件时间就独立运行,相互不影响,我们 通过应用程序获取的时间用的都是操作系统时间

  • 利用Python实现Windows定时关机功能

    是最初的几个爬虫,让我认识了Python这个新朋友,虽然才刚认识了几天,但感觉有种莫名的默契感.每当在别的地方找不到思路,总能在Python找到解决的办法.自动关机,在平时下载大文件,以及跑程序的时候能用到的,刚才写了个windows自动关机的小程序,程序过于简单,就当是玩玩吧,当然还有很多可改进的地方.下面正文:  #ui制作: 照旧,笔者由Qt制作完成需要的ui,包括label,label_2,label_3,lable_4,lineEdit,lineEdit_2,pushButton组件.

  • 修改Windows注册表系统文件为宽带加速

    随着网络技术的发展,Internet的接入速度越来越快,从最初的56K"猫",一直到10M/100M高速光纤,接入方式多种多样.而作为Internet的末端,Windows操作系统为了支持不同的接入设备,适应不同的网络环境,在程序设置方面也相对保守一些,因此,常有用户反映"宽带不快",一些网络优化软件则应运而生,通过修改Windows操作系统的注册表或相关文件来达到为宽带提速的目的,如Windows优化大师.ADSL超频奇兵等,但效果却不太明显. Speedguid

  • windows操作系统更改 远程桌面端口号的方法

    windows远程桌面连接默认使用的是3389端口,为了避免被他人扫描从而暴力破解远程服务器或者病毒入侵.可以将默认端口修改为其它端口,如8888,11111等.最好修改为10000以后的端口,这样可以避免和系统内的其它程序端口冲突. 1.点击[开始]菜单中的[运行]输入regedit 2.在[注册表编辑器]分别修改下列目录中<PortNumber>的值为需要更改的端口号,如:8888 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Te

  • Windows操作系统下Linux虚拟机的安装与配置教程图解

    前言 在工作中,经常需要在Linux环境下操作,这里记一下win10系统中创建安装和配置Linux的操作系统的过程. 资源下载 1.虚拟机VMware VMware可以去官网下载.这里用的是VMware-player-15.5.0版本,下载完安装到电脑上. 链接: https://pan.baidu.com/s/1LWhDtRsYMIWGUs91xp-vlQ 提取码: kkrt 2.镜像系统Ubuntu 镜像也可以去Ubuntu官网下载.这里用的是Ubuntu18.04 64位操作系统.对于入门

随机推荐