如果是每天,那就太简单了,每年才触发365次,这类功能用
Timer
或者
Quartz都可以轻松实现。

解决方案 »

  1.   

    是的,差不多吧,就和google 日历差不多的
      

  2.   


    分析如下:
    1、你设计的不是闹钟,所以预订时间是没什么作用的,只是一个显示属性而已。
    2、按天实际上就是按星期或者按月,只是发生的日期点是“周1、周2、周日”
    3、实际有效的设定是按周、按月、按年。
    4、日历上的每天都要按上面的周期得到属性值,比如今天是“周日”、“28日”、“12月28日”设计如下:
    1、t_memo 备忘录主表:
    id int 主键
    userid  int 表示属于哪个用户
    begindate  date  起始日期(设定开始日期)
    enddate    date  结束日期(如果为空表示一直有效,不过为了编程方便,最好是放入一个非常大的日期,比如2099年12月31日)
    memomessage  varchar  备忘录内容
    alarmtime  time  闹钟时间
    type     int  (1表示按周、2表示按月、3表示按年)
    2、t_schedule 定时表
    id int 主键
    memoid  int  外键关联备忘录主表的主键 
    validdate varchar  有效日期(按周就存入1/2/3/.../7,按月就1/2/....31/,按年就存入0101/0102/....1231)编程(以月历方式):
    从当月1号开始,计算每天的周值、月值、年值(要跟定时表的validdate匹配)
    到数据库中查找满足条件的memomessage,SQL可能会是:
    select m.* from t_memo m,t_schedule s
    where m.id=s.memoid and begindate<=:today and enddate>=:today
    and ((m.type=1 and s.validdate=:weekvalue) or (m.type=2 and s.validdate=:monthvalue) or (m.type=3 and s.validdate=:yearvalue))