万年历

阅读(648) 标签: 万年历, 拼接字符串, date, day, days,

l  问题

请给出未来指定的某年(如2020)的全年日历。使用字符串输出,仿照常见日历的格式,按年月分隔,包含日期和星期信息。

l  思路

大致思路:循环十二个月,首先计算月标题和星期标题添加到万年历,然后循环月中的所有天,按周拼接日期,日期间隔为\t,一周拼接结束把结果追加到万年历,然后继续下一周。

1.  定义年份、结果万年历序列,计算11日位于星期几

2.  循环十二个月,设置每个月的标头栏

3.  循环当前月的天数,按周拼接字符串

4.  一周拼接结束把结果追加到万年历,然后继续下一周

5.  一个月循环结束,把该月最后不满一周的字符串追加到万年历

l  代码

 

A

B

C

D

 

1

1984

=[string(A1)+ ""]

 

 

存放结果万年历

2

=day@w(date(A1,1,1))

 

 

 

存储循环过程中的当前日位于一个星期的第几天,初始为11

3

for 12

>B1=B1|["\n","\t\t\t"+string(date(A1,A3,1),"MMMM"),"\t\t\t\t\t\t"]

 

 

循环月份,设置每个月的标头栏

4

 

=fill("\t",A2-1)

 

 

存放循环过程中当前周字符串,每月第一周要拼上第一天的缩进

5

 

for days(date(A1,A3,1))

 

 

循环当前月的所有天,按周将日拼接到当前周字符串B4

6

 

 

>A2=A2+1

 

 

7

 

 

>B4=B4+string(B5)

 

 

8

 

 

if A2==8

>A2=1

一周循环完则回到周一

9

 

 

 

>B1=B1|B4

将循环完的周字符串添加到万年历

10

 

 

 

>B4=""

 

11

 

 

else

>B4=B4+"\t"

否则拼接\t作为日间分隔符

12

 

if B4!=""

>B1=B1|B4

 

每月的最后一周可能不满7天,也要拼接到万年历

 

l  结果