如何获取选定日期的星期几?遍历月份日期时星期显示异常求助
解决Delphi遍历月份日期时显示对应星期的问题
你的核心问题是每次调用DayofWeek(CalendarView1.Date)取的都是日历控件选中日期的星期,而非当前遍历的日期,所以遍历10月所有日期时,始终返回的是10月第一天的星期值。
修改方案
在循环遍历每个日期时,针对当前的dtCurrentDate调用DayOfWeek,再把返回的数字转换为对应的星期文本即可。以下是修改后的完整代码:
var dtSelectedDate, dtStartDate, dtEndDate, dtCurrentDate: TDateTime; WeekNum: Integer; WeekStr: string; begin dtSelectedDate := DateOf(CalendarView1.Date); dtStartDate := StartOfTheMonth(dtSelectedDate); dtEndDate := EndOfTheMonth(dtSelectedDate); EditMonth.Text := IntToStr(DaysInMonth(dtSelectedDate)); EditStartDay.Text := DateToStr(dtStartDate); EditEndDay.Text := DateToStr(dtEndDate); dtCurrentDate := dtStartDate; while dtCurrentDate <= dtEndDate do begin T1.Insert; T1.FieldByName('Days').AsDateTime := dtCurrentDate; // 获取当前遍历日期的星期数字(Delphi中1=周日,2=周一...7=周六) WeekNum := DayOfWeek(dtCurrentDate); // 转换为中文星期文本 case WeekNum of 1: WeekStr := '星期日'; 2: WeekStr := '星期一'; 3: WeekStr := '星期二'; 4: WeekStr := '星期三'; 5: WeekStr := '星期四'; 6: WeekStr := '星期五'; 7: WeekStr := '星期六'; end; // 将星期文本写入数据集(需确保T1有WeekDay字符串字段) T1.FieldByName('WeekDay').AsString := WeekStr; T1.Post; dtCurrentDate := dtCurrentDate + 1; end; end;
关键说明
- 替换星期获取对象:把
DayofWeek(CalendarView1.Date)改为DayOfWeek(dtCurrentDate),确保每次循环都取当前遍历日期的星期。 - 星期数字转文本:Delphi的
DayOfWeek返回1到7的整数,对应周日到周六,通过case语句可以转换为易读的星期名称。 - 字段准备:如果你的数据集
T1没有存储星期的字段,需要先添加一个字符串类型的字段(比如命名为WeekDay)。
内容的提问来源于stack exchange,提问作者fateh djelti
相关产品推荐
相关产品推荐

