delphi7中怎么仅仅更改系统的日期,而不更改系统的时间?

ddvddt1 2016-09-30 10:15:29
procedure TForm1.btn1Click(Sender: TObject);
var
d1:TDate;
cd:string;
systemtime:Tsystemtime;
begin
cd:='2016-09-09' ;
d1:=StrToDate(cd);
DateTimeToSystemTime(d1,systemtime);
SetLocalTime(SystemTime); //这么已设置,系统的日期是改了,但是时间从0):00:00开始了
end;
end.
请问怎么才能只更改日期而不更改时间?多谢!
...全文
1866 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sseedd 2017-08-29
  • 打赏
  • 举报
回复
procedure chgDateto(dto:TDate); var newDatetime:TDateTime; systemtime:Tsystemtime; begin newDatetime:=now() + (dto - date); DateTimeToSystemTime(newDatetime,systemtime); SetLocalTime(systemtime); end;
ddvddt1 2017-01-24
  • 打赏
  • 举报
回复
根据lyhoo163老师和DelphiGuy朋友的提醒,得到我要我的结果,谢谢大家,祝大家鸡年吉祥!
ddvddt1 2016-11-22
  • 打赏
  • 举报
回复
各位老师,3楼的方法不是一个十分完美的方法,缺点就是如果我每天运行好多次程序的话,系统时间就会变慢很多,这不是我想要的,我想要的是仅仅更改日期,而不对时间做任何修改,请问各位老师delphi7中是否可以实现我的上述要求。谢谢!
引用 5 楼 lyhoo163 的回复:
[quote=引用 4 楼 leeky 的回复:] D2 : TDateTime; ....... D2 := Now(); d1 := d1+ D2 - floor(D2); ....... 友情提示,直接使用'2016-09-09'在某些电脑上会出错的,因为那些机器上系统时间格式可能用'/'作分隔符.如果用图形界面,可以弄两个TDateTimePicker,一个显示日期,一个显示时间,那么 d1 = floor(dtpDay.DateTime) + dtpTime.DateTime - floor(dtpTime.DateTime); 后面就是你的设置代码了。
DateSeparator:='-'; 将日期分隔符,设置为“-”。[/quote]
lyhoo163 2016-11-22
  • 打赏
  • 举报
回复
引用 3 楼 lyhoo163 的回复:
procedure TForm1.Button1Click(Sender: TObject);
var
  d1:TDatetime;
  cd:string;
  systemtime:Tsystemtime;
  S:string;
begin
  DateSeparator:='-';
  ShortDateFormat:='yyyy-MM-dd';
  LongDateFormat:='yyyy''年'',MM''月'',dd''日''';
  TimeSeparator:=':';
  DateTimetoString(S,'hh:nn:ss',now);
  cd:='2016-09-30 '+S;
  d1:=StrToDateTime(cd);
  DateTimeToSystemTime(d1,systemtime);
  SetLocalTime(SystemTime);
end;
上机测试正常。
写代码时,你可以加上执行代码的时间差。此值,因计算机的CPU速度不一。你写段代码计算一下,加入此值,即可了。
  • 打赏
  • 举报
回复
加上若干毫秒的过载。
dai78 2016-10-17
  • 打赏
  • 举报
回复
读出系统时间,然后AddDays、AddYear
lyhoo163 2016-10-14
  • 打赏
  • 举报
回复
引用 4 楼 leeky 的回复:
D2 : TDateTime; ....... D2 := Now(); d1 := d1+ D2 - floor(D2); ....... 友情提示,直接使用'2016-09-09'在某些电脑上会出错的,因为那些机器上系统时间格式可能用'/'作分隔符.如果用图形界面,可以弄两个TDateTimePicker,一个显示日期,一个显示时间,那么 d1 = floor(dtpDay.DateTime) + dtpTime.DateTime - floor(dtpTime.DateTime); 后面就是你的设置代码了。
DateSeparator:='-'; 将日期分隔符,设置为“-”。
leeky 2016-10-14
  • 打赏
  • 举报
回复
D2 : TDateTime; ....... D2 := Now(); d1 := d1+ D2 - floor(D2); ....... 友情提示,直接使用'2016-09-09'在某些电脑上会出错的,因为那些机器上系统时间格式可能用'/'作分隔符.如果用图形界面,可以弄两个TDateTimePicker,一个显示日期,一个显示时间,那么 d1 = floor(dtpDay.DateTime) + dtpTime.DateTime - floor(dtpTime.DateTime); 后面就是你的设置代码了。
zbdzjx 2016-09-30
  • 打赏
  • 举报
回复
读出当前时间,改系统日期时,加上这个时间。
lyhoo163 2016-09-30
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var
  d1:TDatetime;
  cd:string;
  systemtime:Tsystemtime;
  S:string;
begin
  DateSeparator:='-';
  ShortDateFormat:='yyyy-MM-dd';
  LongDateFormat:='yyyy''年'',MM''月'',dd''日''';
  TimeSeparator:=':';
  DateTimetoString(S,'hh:nn:ss',now);
  cd:='2016-09-30 '+S;
  d1:=StrToDateTime(cd);
  DateTimeToSystemTime(d1,systemtime);
  SetLocalTime(SystemTime);
end;
上机测试正常。
jjpweb 2016-09-30
  • 打赏
  • 举报
回复
诶,同上。。。。

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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