日期时间设置

湖中仙人 2010-09-08 10:15:59
我取回服务器上的日期时间后,在本机上如何将本机的日期时间设置为与服务器一致??
...全文
157 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
glest 2010-09-09
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 xiaowengang 的回复:]

还是没解决啊,用远程服务器上的日期时间修改本机的日期时间
[/Quote]

可能是权限问题。单独建一个工程试一下上面的代码。
湖中仙人 2010-09-09
  • 打赏
  • 举报
回复
还是没解决啊,用远程服务器上的日期时间修改本机的日期时间
下山老虎打_ 2010-09-09
  • 打赏
  • 举报
回复
来学习的
glest 2010-09-09
  • 打赏
  • 举报
回复
我是在本地管理员administrator下测试的。
湖中仙人 2010-09-09
  • 打赏
  • 举报
回复
glest,谢谢了,
不过少了个命名空间;
using System.Runtime.InteropServices;
glest 2010-09-09
  • 打赏
  • 举报
回复
汗!测试了一下上面的代码都有毛病:猫哥的不能修改,后面提供的没考虑时区,导致修改错误。
两者结合就OK了:

public class Win32
{
[StructLayout(LayoutKind.Sequential)]
public struct SystemTime
{
public ushort year;
public ushort month;
public ushort dayofweek;
public ushort day;
public ushort hour;
public ushort minute;
public ushort second;
public ushort milliseconds;
}

[ DllImport( "Kernel32.dll" )]
private static extern Boolean SetSystemTime(ref SystemTime st);

[DllImport("Kernel32.dll ")]
public static extern void GetSystemTime(ref SystemTime sysTime);

public static bool SetSysTime(ref DateTime newdatetime)
{
SystemTime st = new SystemTime();
st.year = Convert.ToUInt16(newdatetime.Year);
st.month = Convert.ToUInt16(newdatetime.Month);
st.day = Convert.ToUInt16(newdatetime.Day);
st.dayofweek = Convert.ToUInt16(newdatetime.DayOfWeek);
st.hour = Convert.ToUInt16(newdatetime.Hour - TimeZone.CurrentTimeZone.GetUtcOffset(new DateTime(2001, 09, 01)).Hours);
st.minute = Convert.ToUInt16(newdatetime.Minute);
st.second = Convert.ToUInt16(newdatetime.Second);
st.milliseconds = Convert.ToUInt16(newdatetime.Millisecond);

return SetSystemTime(ref st);
}

}


调用:
 DateTime dt = DateTime.Parse("2010-9-9 16:00:00");
bool b= Win32.SetSysTime(ref dt);

glest 2010-09-09
  • 打赏
  • 举报
回复
我给你测试下
湖中仙人 2010-09-09
  • 打赏
  • 举报
回复
唉,没想到改个日期和时间这么难
上海程序员3 2010-09-08
  • 打赏
  • 举报
回复
问下windows 7上能直接运行此代码吗,好像权限上的问题,不能直接运行了吧
ljb3326 2010-09-08
  • 打赏
  • 举报
回复
学习。。。。。。。
wuyq11 2010-09-08
  • 打赏
  • 举报
回复
using System;
using System.Runtime.InteropServices;

[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 wMiliseconds;
}

public class Win32
{
[DllImport( "Kernel32.dll ")]
public static extern bool SetSystemTime( ref SystemTime sysTime );
[DllImport( "Kernel32.dll ")]
public static extern void GetSystemTime(ref SystemTime sysTime);
}

public class TestPInvoke
{
public static void Main()
{
SystemTime sysTime = new SystemTime();

sysTime.wYear = 2003;
sysTime.wMonth=1;
sysTime.wDay=1;
sysTime.wHour=1;
sysTime.wMinute=1;
sysTime.wSecond=1;
sysTime.wMiliseconds=1;

Win32.SetSystemTime(ref sysTime);
}
}
湖中仙人 2010-09-08
  • 打赏
  • 举报
回复
怎么比VB6还麻烦
whh_bigsea 2010-09-08
  • 打赏
  • 举报
回复
解析时间,然后调用win32API
porschev 2010-09-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 q107770540 的回复:]
C# code

/// <summary>
2 ///系统时间类
3 /// </summary>
4 [ StructLayout( LayoutKind.Sequential )]
5 public class SystemTime
6 {
7 public ushort year;
8 public ushort month;
9 public u……
[/Quote]

调用windows时间API
ztenv 2010-09-08
  • 打赏
  • 举报
回复
解析时间,然后调用win32API
glest 2010-09-08
  • 打赏
  • 举报
回复
using       System;       
using System.Runtime.InteropServices;

[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 wMiliseconds;
}

public class Win32
{
[DllImport( "Kernel32.dll ")]
public static extern bool SetSystemTime( ref SystemTime sysTime );
[DllImport( "Kernel32.dll ")]
public static extern void GetSystemTime(ref SystemTime sysTime);
}

public class TestPInvoke
{
public static void Main()
{
SystemTime sysTime = new SystemTime();

sysTime.wYear = 2003;
sysTime.wMonth=1;
sysTime.wDay=1;
sysTime.wHour=1;
sysTime.wMinute=1;
sysTime.wSecond=1;
sysTime.wMiliseconds=1;

Win32.SetSystemTime(ref sysTime);
}
}
glest 2010-09-08
  • 打赏
  • 举报
回复
using       System;       
using System.Runtime.InteropServices;

[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 wMiliseconds;
}

public class Win32
{
[DllImport( "Kernel32.dll ")]
public static extern bool SetSystemTime( ref SystemTime sysTime );
[DllImport( "Kernel32.dll ")]
public static extern void GetSystemTime(ref SystemTime sysTime);
}

public class TestPInvoke
{
public static void Main()
{
SystemTime sysTime = new SystemTime();

sysTime.wYear = 2003;
sysTime.wMonth=1;
sysTime.wDay=1; [code=C#]

sysTime.wHour=1;
sysTime.wMinute=1;
sysTime.wSecond=1;
sysTime.wMiliseconds=1;

Win32.SetSystemTime(ref sysTime);
}
} [/code]
q107770540 2010-09-08
  • 打赏
  • 举报
回复

/// <summary>
2 ///系统时间类
3 /// </summary>
4 [ StructLayout( LayoutKind.Sequential )]
5 public class SystemTime
6 {
7 public ushort year;
8 public ushort month;
9 public ushort dayofweek;
10 public ushort day;
11 public ushort hour;
12 public ushort minute;
13 public ushort second;
14 public ushort milliseconds;
15 }
16
17 /// <summary>
18 /// Windows API方法
19 /// </summary>
20 public class WinAPI
21 {
22 [ DllImport( "Kernel32.dll" )]
23 private static extern Boolean SetSystemTime([In,Out] SystemTime st);
24
25 /// <summary>
26 /// 设置系统时间
27 /// </summary>
28 /// <param name="newdatetime">新时间</param>
29 /// <returns></returns>
30 public static bool SetSysTime(DateTime newdatetime)
31 {
32 SystemTime st = new SystemTime();
33 st.year = Convert.ToUInt16(newdatetime.Year);
34 st.month = Convert.ToUInt16(newdatetime.Month);
35 st.day = Convert.ToUInt16(newdatetime.Day);
36 st.dayofweek = Convert.ToUInt16(newdatetime.DayOfWeek);
37 st.hour = Convert.ToUInt16(newdatetime.Hour - TimeZone.CurrentTimeZone.GetUtcOffset(new DateTime(2001,09,01)).Hours);
38 st.minute = Convert.ToUInt16(newdatetime.Minute);
39 st.second = Convert.ToUInt16(newdatetime.Second);
40 st.milliseconds = Convert.ToUInt16(newdatetime.Millisecond);
41 return SetSystemTime(st);
42 }
43 }

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧