我现在又写了一段代码,可以算周了,可是算出来的有些不对,具体算法错在哪里,请大家帮我看看
function Tmain.dayweekofyear( Mydate:string):integer;
var
Year, Month, Day: Word;
i,Mydays,weeks:integer;
begin
Mydays:=0;
DecodeDate(strtodate(Mydate), Year, Month, Day);
for i:=1 to month-1 do
begin
if i=2 then
begin
if IsLeapYear(year) then
Mydays:=Mydays+29;
if (not IsLeapYear(year)) then
Mydays:=Mydays+28;
end;
if i mod 2 =0 then
Mydays:=Mydays+30
else
Mydays:=Mydays+31;
end;
Mydays:=Mydays+day;
weeks:=Mydays div 7 +1 ;
result:=weeks;
end;
然后调用的时候是这样dayweekofyear(datetostr(now))
请问错在哪里
function Tmain.dayweekofyear( Mydate:string):integer;
var
Year, Month, Day: Word;
i,Mydays,weeks:integer;
begin
Mydays:=0;
DecodeDate(strtodate(Mydate), Year, Month, Day);
for i:=1 to month-1 do
begin
if i=2 then
begin
if IsLeapYear(year) then
Mydays:=Mydays+29;
if (not IsLeapYear(year)) then
Mydays:=Mydays+28;
end;
if i mod 2 =0 then
Mydays:=Mydays+30
else
Mydays:=Mydays+31;
end;
Mydays:=Mydays+day;
weeks:=Mydays div 7 +1 ;
result:=weeks;
end;
然后调用的时候是这样dayweekofyear(datetostr(now))
请问错在哪里
解决方案 »
- sql语句中COUNT 和DISTINCT结合使用的一条语法错误
- tcombobox控件设置问题!
- 请大家对如何编写麻将游戏的胡牌函数发表高见。
- edit显示问题,急!!!
- 如何在程序开始时自动把客户机上的时间和服务器校对一致?
- 奇怪了,大家看看!
- TSQLConnection的Transaction的问题。(如能解决,我可以另开两贴共给300分)
- 关于MapX中的鹰眼缩放比例问题(高手请进)
- 如何将一个txt文件读到一个string中?
- 如何将所有控件(包括动态创建的控件)各项属性存入指定文件,并从该文件中读取
- 如何设置Word2000中表格某个单元格的列宽,列高?
- 对数据处理的一序列问题,请求支援!
但你不应该算月份的天数,周跟月没有关系,应该先算出来本年第一天是周内第几天,然后把上面的日期差加上它减一再除以七加一就行了。var wYear, wMonth, wDay: Word;
DecodeDate( 日期, wYear, wMonth, wDay );
第几周 = (日期-EncodeDate( wYear, 1, 1 )+DayOfWeek(日期)-1) div 7 + 1;
// 这里假定星期天是每周第一天
你的方法我试过了procedure TForm1.FormCreate(Sender: TObject);
var wYear, wMonth, wDay: Word;
begin
DecodeDate(now, wYear, wMonth, wDay );
(now-EncodeDate( wYear, 1, 1 )+DayOfWeek(now)-1) div 7 + 1;
end;
可是编译的时候确报错了呀,这行不对
(now-EncodeDate( wYear, 1, 1 )+DayOfWeek(now)-1) div 7 + 1;
错误信息
为operator not applicable to this operand type
请问该如何修改
var wYear, wMonth, wDay: Word;
weeks : Integer ;
begin
DecodeDate(now, wYear, wMonth, wDay );
weeks := (trunc (now-EncodeDate( wYear, 1, 1 ))+DayOfWeek(now)-1 ) div 7 + 1;
showmessage(inttostr(weeks))end;
var
wYear, wMonth, wDay: Word;
dFirstDay: TDate;
begin
DecodeDate( ADate, wYear, wMonth, wDay ); // 先拆分年月日
dFirstDay := EncodeDate(wYear, 1, 1); // 得到元旦日
Result := Trunc(ADate-dFirstDay+DayOfWeek(dFirstDay)-1) div 7 + 1;
// 日期相减为得到本年的第几天,
// 加上元旦日所在的周内第几天
// (DayOfWeek结果是1至7,星期天为第1天,所以要减1)(相当于相位补偿),
// 然后用Trunc取整除以七得到以0开始的周号,加1变成以1开始的周号
end;