hu9jj 发表于 2008-3-10 17:38

有什么办法可以动态设置系统日期吗?

在程序中改变系统日期可用外部命令run date YYYY-MM-DD来实现,但其中的年月日必须是字符,而不能是字符串变量。请问如何才能用变量来设置系统日期呢?
我先将年月日转换为字符串变量,然后用括号()或宏替换&都无法执行。下列办法都已经试过:
Cdate = str(year(date()),4) + "-" + alltri(str(month(date()))) + "-" + alltri(str(day(date())))
run date &Cdate

Cdate = str(year(date()),4) + "-" + alltri(str(month(date()))) + "-" + alltri(str(day(date())))
run date (Cdate)

Cdate = "date " + str(year(date()),4) + "-" + alltri(str(month(date()))) + "-" + alltri(str(day(date())))
run &Cdate

Cdate = "run date " + str(year(date()),4) + "-" + alltri(str(month(date()))) + "-" + alltri(str(day(date())))
&Cdate

Tiger5392 发表于 2008-3-10 20:18

好像有一个API函数可以修改系统日期和时间,楼主查一查。

啸凡 发表于 2008-3-10 22:06

有一个函数可以调用系统的成年历,我一时忘记了,您查一下。调用后好像在Windows下面詷日期一样。

baichuan 发表于 2008-3-11 08:30

也许有用?

Win32   API的SetSystemTime   API函数来设置系统时间:   
   
  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   =3D   new   SystemTime();   
   
  sysTime.wYear   =   2002;   
  sysTime.wMonth=1;   
  sysTime.wDay=1;   
  sysTime.wDayOfWeek=1;   
  sysTime.wHour=1;   
  sysTime.wMinute=1;   
  sysTime.wSecond=1;   
  sysTime.wMiliseconds=1;   
   
  Win32.SetSystemTime(ref   sysTime);   
  }   
  }

hu9jj 发表于 2008-3-11 09:05

谢谢几位版主热情相助!

我用下面的方法已经实现了:
wdt = "Run date " + STR(YEAR(wjd),4) + "-" + PADL(ALLTRIM(STR(MONTH(wjd))),2,"0") + "-" + PADL(ALLTRIM(STR(DAY(wjd))),2,"0")

&wdt
原来直接用字符时可以不要月日的前导零,如:
run date 2008-1-1
而用字符变量时则一定要月日的前导零,如:
wdt = "run date 2008-01-01"
&wdt
又获得了一条经验。

页: [1]

编程论坛