Farseer

导航

如何改变系统时间

在CMD里用DOS命令,可以很容易地修改系统的当前时间,Time 修改后的时间,Date 修改后的日期。我想所有经历过DOS的都知道这个命令。可是在C#里如何修改系统的当前日期和时间?只能通过调用API函数的做法了。示例代码如下:
using System;
using System.Runtime.InteropServices;


namespace UpdateSystemTime
{
    
class UpdateTime
    
{
        [STAThread]
        
static void Main(string[] args)
        
{
            
//更改系统当前时间
            if (!SystemTime.SetSystemTime(2003,10,20))
            
{
                Console.WriteLine(
"未能正确修改系统时间!");
            }
        

        }

    }


    [StructLayout(LayoutKind.Sequential)]
    
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;

        [DllImport(
"Kernel32.dll")]
        
public static extern bool SetSystemTime(ref SystemTime st);
        [DllImport(
"Kernel32.dll")]
        
public static extern void GetSystemTime(out SystemTime st);

        
/// <summary>
        
/// 更改系统当前时间
        
/// </summary>
        
/// <param name="year">年份</param>
        
/// <param name="mon">月份</param>
        
/// <param name="day">日期</param>
        
/// <returns>是否更改成功</returns>

        public static bool SetSystemTime(int year,int mon,int day)
        
{
            SystemTime st 
= new SystemTime();
            st.wYear 
= (ushort)year;
            st.wMonth 
= (ushort)mon;
            st.wDay 
= (ushort)day;

            
return SetSystemTime(ref st);
        }

    }

}



其实很简单,代码一看就明白了,示例中只重载了一次SetSystemTime函数,可重载多次。不过要注意的是,原来的API函数是按照你传入的数据是格林尼治时间来计算的,它会把你传入的值当成格林尼治时间,它会结合你机子的时区设置,自动调整。比如我们的时间,它会自动把你传入的值加8个小时,因为我们是东八区,比格林尼治早8个小时。这样也好办,只要传入的值是格林尼治时间就可以了,让它自己去算吧。

posted on 2005-03-09 22:30  佛西亚  阅读(1449)  评论(0编辑  收藏  举报