以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]每月最后一周周六下午14:00执行一次计划怎么写呢  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=118270)

--  作者:laipiwen
--  发布时间:2018/4/27 17:47:00
--  [求助]每月最后一周周六下午14:00执行一次计划怎么写呢
每月最后一周周六下午14:00执行一次计划怎么写?
隔周周三下午14:00  呢?
看了论坛上类似帖子,还是没有思路 请老师帮忙看看!

--  作者:有点甜
--  发布时间:2018/4/27 18:01:00
--  

1、如果要计划执行,你必须在那个时候程序是打开的状态才行;

 

2、建议做成这种方式:做一个计划表,把需要执行操作的时间点,都保存在表格里面;做一个计划任务,搜索小于当前时间没有执行的行,执行对应的代码,即可;执行完以后,标记为已执行。


--  作者:laipiwen
--  发布时间:2018/4/27 20:53:00
--  
以下是引用有点甜在2018/4/27 18:01:00的发言:

1、如果要计划执行,你必须在那个时候程序是打开的状态才行;

 

2、建议做成这种方式:做一个计划表,把需要执行操作的时间点,都保存在表格里面;做一个计划任务,搜索小于当前时间没有执行的行,执行对应的代码,即可;执行完以后,标记为已执行。


这样的话关键是需要手动填写保存时间点,能否像这样用语句自动执行?

static d1 As Date = Date.today.AddDays(-1)
If d1 <> Date.today AndAlso Date.Now.Hour = 20    Then
d1 = Date.today

[此贴子已经被作者于2018/4/27 20:54:04编辑过]

--  作者:有点蓝
--  发布时间:2018/4/27 21:06:00
--  
可以的,判断好时间即可,类似


\'如果是凌晨3点,则进行一些一天才处理一次的任务
Dim dNow As Date = Date.Now
If dNow.Hour = 3 AndAlso Format(s_TaskDate,"yyyyMMddHH") <> Format(dNow,"yyyyMMddHH") Then
    s_TaskDate = Date.Now
    s_Tasking = True
    Functions.Execute("LogText","开始一天才处理一次的任务")


    \'每月28日才重置默认的选择题序
    If dNow.Day = 28 Then
        Functions.Execute("LogText","月28日开始设置默认的选择题序,T_SetDefaultRandSelectionTask")
    End If

    \'每周四 才重置本周已做题的选择题序,根据实际使用频率再调整
    If dNow.DayOfWeek = 4 Then
        Functions.Execute("LogText","周4开始设置已做题的用户的选择题序,T_SetUserSelectionTasks")

    End If
End If
s_Tasking = False

--  作者:laipiwen
--  发布时间:2018/4/27 21:18:00
--  
以下是引用有点蓝在2018/4/27 21:06:00的发言:
可以的,判断好时间即可,类似


\'如果是凌晨3点,则进行一些一天才处理一次的任务
Dim dNow As Date = Date.Now
If dNow.Hour = 3 AndAlso Format(s_TaskDate,"yyyyMMddHH") <> Format(dNow,"yyyyMMddHH") Then
    s_TaskDate = Date.Now
    s_Tasking = True
    Functions.Execute("LogText","开始一天才处理一次的任务")


    \'每月28日才重置默认的选择题序
    If dNow.Day = 28 Then
        Functions.Execute("LogText","月28日开始设置默认的选择题序,T_SetDefaultRandSelectionTask")
    End If

    \'每周四 才重置本周已做题的选择题序,根据实际使用频率再调整
    If dNow.DayOfWeek = 4 Then
        Functions.Execute("LogText","周4开始设置已做题的用户的选择题序,T_SetUserSelectionTasks")

    End If
End If
s_Tasking = False

感谢耐心解答,我还是不太明白针对我这个具体的需求该怎么写代码?
每月最后一周周六下午14:00 
隔周周三下午14:00   

这里面 每周六 每周三 都是很好判断,每月最后一周   和隔周 真不知道代码怎么判断

[此贴子已经被作者于2018/4/27 21:22:51编辑过]

--  作者:有点蓝
--  发布时间:2018/4/27 21:45:00
--  
获取每月最后一天是星期几,往前推出周六。

隔周使用变量计数,计数为2执行,然后清零重新计数

--  作者:laipiwen
--  发布时间:2018/4/28 9:33:00
--  
以下是引用有点蓝在2018/4/27 21:45:00的发言:
获取每月最后一天是星期几,往前推出周六。

隔周使用变量计数,计数为2执行,然后清零重新计数

static d1 As Date = Date.today.AddDays(-1)
static i As Integer = 1 
If d1 <> Date.today AndAlso Date.Now.Hour = 14 AndAlso Date.today.DayOfWeek = 3    Then
    i = i + 1 
    If i = 2
        d1 = Date.today
        i = 1
        Output.Show(d1)
    End If
End If
    Output.Show(d1)
    \'Output.Clear
老师是这样写吗?

static d1 As Date = Date.today.AddDays(-1)
static i As Integer = 1 
Dim m As Integer = Date.today.Month
Dim y As Integer = Date.today.Year
Dim Days As Integer = Date.DaysInMonth(y,m)
Dim LastDay As Date = New Date(y,m,Days)
Output.Show(LastDay.DayOfWeek)
Output.Show(LastDay)

这里得到最后一天是周几  该怎么样推出那天是周六呢?

[此贴子已经被作者于2018/4/28 9:49:20编辑过]

--  作者:有点甜
--  发布时间:2018/4/28 9:52:00
--  
Dim m As Integer = Date.today.Month
Dim y As Integer = Date.today.Year
Dim d As Date = new Date(y, m, 1)
d = d.AddMonths(1).AddDays(-1)
Do While True
    If d.DayOfWeek = 6 Then
        Exit do
    End If
    d = d.AddDays(-1)
Loop
msgbox(d)

--  作者:laipiwen
--  发布时间:2018/4/29 9:04:00
--  
以下是引用有点甜在2018/4/28 9:52:00的发言:
Dim m As Integer = Date.today.Month
Dim y As Integer = Date.today.Year
Dim d As Date = new Date(y, m, 1)
d = d.AddMonths(1).AddDays(-1)
Do While True
    If d.DayOfWeek = 6 Then
        Exit do
    End If
    d = d.AddDays(-1)
Loop
msgbox(d)
太感谢了