none
請問如何在系統的時間區間內執行動作? RRS feed

  • 問題

  • Hi all,

    請教一下,以下面這段是每次接收到AAAA就會彈出一個視窗,我想寫在某一個特定的系統時間內才會彈出視窗。

    比方說今天是2015年10月6號12:55 PM,我希望在2015年10月7號10:10 AM ~ 2015年11月1號13:14 PM 這段時間內收到AAAA會彈出視窗,在這段時間以外則不會彈出視窗。

    請前輩們指點,謝謝。

    IF Left(Table-1, 4) = "AAAA" then
    Table-1 = MsgBox("動作",0+48)
    END IF

    2015年10月6日 上午 05:06

解答

  • 您好,

    因為 FormatDateTime(Now,3) 只會取出 時間。

    如果是要比較日期,直接將S及E轉成日期來比較就可以了,如下,

    msgbox FormatDateTime(Now,3)
     
    S = "2015/10/07 10:10:00"
    E = "2015/10/08 13:20:00"
    msgbox Now > CDate(S)
    msgbox Now < CDate(E)
    If Now > CDate(S) And Now < CDate(E) Then
    msgbox "between " & S & ":" & E 
    End If
     

    VBScript您可以參考以下的link

    http://www.w3school.com.cn/vbscript/func_cdate.asp

    我是將上面的程式,存成 test.vbs ,然後直接執行,就可以測試了。


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/


    • 已編輯 亂馬客 2015年10月8日 上午 05:21
    • 已標示為解答 Marco Dai 2015年10月8日 下午 11:21
    2015年10月8日 上午 05:21

所有回覆

  • Hi Peter,

    我先測試一下再回您,謝謝。

    2015年10月6日 上午 06:03
  • 您可以利用這篇文件提供的Scheduled Timer, 在指定的時間點執行欲執行的工作:.NET Scheduled Timer

    2015年10月6日 上午 06:04
  • 發問者並不是要做排程之類的吧. 如果我沒看錯, 他的意思解釋成流程應該是

    (1) 系統收到一個訊息 "AAAA"

    (2) 收到訊息之後, 判斷 現在的時間 (用 DateTime.Now 屬性就可以取得), 是否介於某個時間內

    (3) 如果 (2) 是 true, 則跳出 MessageBox .

    所以, 只要用 大於小於 之類的判斷不就好了嗎 ?

       Dim current As DateTime t = DateTime.Now 
    
            If current > New DateTime(2015, 10, 17, 10, 10, 0) AndAlso current < New DateTime(2015, 11, 1, 13, 14, 0) Then
                '' 執行你要的動作
            End If


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。


    2015年10月6日 上午 06:30
    版主
  • 您可以利用這篇文件提供的Scheduled Timer, 在指定的時間點執行欲執行的工作:.NET Scheduled Timer

    謝謝,晚點測試。
    2015年10月6日 上午 06:31
  •    Dim current As DateTime t = DateTime.Now 
    
            If current > New DateTime(2015, 10, 17, 10, 10, 0) AndAlso current < New DateTime(2015, 11, 1, 13, 14, 0) Then
                '' 執行你要的動作
            End If


    由於我的文字表達不清,造成誤會。我的意思確實如您所說,謝謝版主。
    我知道您寫的語法是正確的,但是在我的測試環境卻會出現錯誤,比方說第一行 Dim current As DateTime t = DateTime.Now 電腦就不能接受(若您要知道錯誤訊息我在寫出來)。我的測試方法是將這些寫在純文字檔讓條碼機去讀取Script。

    因此為了測試我把時間縮短改成如下列所示,但實際測試後,當目前時間大於S都顯示MSG動作,小於則不顯示MSG,看起來判斷的條件不包含"E",如果把And改成 AndAlso 也會出現錯誤訊息。

    請各位指教,謝謝。

    S = "2015/10/07 10:49:00"
    E = "2015/10/07 10:55:00"
    IF Now > S and Now < E Then ; 當現在的時間大於S且小於E (10:49~10:55)
    Table-1 = MsgBox("動作",0+48) ; 顯示MSG 動作
    ElseIF Left(Title, 4) = "AAAA" then  ; 接收到AAAA之後
    Table-1 = MsgBox("動作",0+48) ; 顯示MSG 動作

    END IF


    • 已編輯 Marco Dai 2015年10月7日 上午 04:47
    2015年10月7日 上午 04:38
  • Sorry , 應該是打字的時候手歪了.

    正確的語法應該是 Dim current As DateTime = DateTime.Now

    請把=號左邊多出來的那個 t 給移除 .


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2015年10月7日 上午 04:58
    版主
  • Sorry , 應該是打字的時候手歪了.

    正確的語法應該是 Dim current As DateTime = DateTime.Now

    請把=號左邊多出來的那個 t 給移除 .

    報告版主,那個t我之前已經去除掉,但是還是有錯誤訊息。請容我再測試一次。

    錯誤訊息為:

    Description: Expected end of statement
    Error number:1025
    Line Number:1011
    Surrounding Code: Dim current As DateTime = DateTime.Now

    我猜可能不接受DateTime.Now


    • 已編輯 Marco Dai 2015年10月7日 上午 05:07
    2015年10月7日 上午 05:02
  • 你用的是哪個版本的 VB ?


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2015年10月7日 上午 05:21
    版主
  • 這是寫在純文字檔讓軟體去抓取,我只知道可接受的語言是VB、VBS。
    之前我也是參照這兩種語法去寫別的功能,沒有發現什麼問題。
    可以確定的是不接受C語言。
    很麻煩是吧,這是我們的痛,辛苦您了。

    2015年10月7日 上午 05:25
  • 這是寫在純文字檔讓軟體去抓取,我只知道可接受的語言是VB、VBS。
    之前我也是參照這兩種語法去寫別的功能,沒有發現什麼問題。
    可以確定的是不接受C語言。
    很麻煩是吧,這是我們的痛,辛苦您了。

    喔, 因為我寫的是 Visual Basic.Net , 照你的說法, 有可能是 VBScript , 不過 VBScript 我不熟, 關於 VBScript 的 Date Time Function , 你可以參考這邊 http://www.pctools.com/guides/scripting/id/23/?act=reference

    總之邏輯就是, 取得現在的時間 (看文件應該就是直接呼叫 Now() ), 然後做區間比對. 除非有熟 VBScript 的朋友出來幫忙, 否則你還是先看看那份文件, 學學 VBScript 的語法吧.

    還有, 有領薪水就沒甚麼痛的, 我們在這回答問題可是完全沒有任何報酬的 (我雖是版主, 但非微軟員工, 這工作也不支薪的)


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2015年10月7日 上午 09:28
    版主
  • 我並沒有認為任何人"義務" 幫忙解答問題是理所當然的,相反的我認為這邊的人很偉大,感謝所有人的幫忙。
    • 已編輯 Marco Dai 2015年10月7日 下午 11:52
    2015年10月7日 下午 11:02
  • 您好,

    因為是給其他軟體去call的,所以可以check一下那個軟體建議的使用語言,

    那種一般來說會是 VBScript or JScript。

    如果 Andalso 無法使用的話,只好使用 2 個 if 去判斷,類似如下,

    Dim S = "2015/10/07 10:49:00"
    Dim E = "2015/10/07 10:55:00"
    Dim isSEBetween
    isSEBetween = False
    If Now > S And Now < E Then
    	If Now < E Then
    		isSEBetween = True
    	End If
    End If

    後面再判斷 isSEBetween 的值再處理。

    希望對您有幫助。


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/


    2015年10月8日 上午 01:22
  • Hi all,

    不確定是什麼因素,系統不接受ISSEBETWEEN,所以我去掉之後經測試
    以下敘述句可以在 10:10:00~11:50:00 遇到值AAAA 顯示MSGBOX動作。
    剩下唯一的問題就是在加上年月日就可以完成,懇請請各位指教。
    我看大部分的語法如果要附註都是加上";",但是這個系統只接受"'"才能忽略。

    針對年月日的部分我試過: 
    1. "2015/10/07 10:10:00" '測試結果不會判斷
    2. #2015/10/07 10:10:00# '測試結果不會判斷
    3. "10/07/104 10:10:00" '測試結果不會判斷
    4. "10/07/2015 10:10:00" '測試結果不會判斷

    動作正確:

    S = "10:10:00"
    E = "11:50:00"
    If FormatDateTime(Now,3) > S And FormatDateTime(Now,3) < E Then
    If FormatDateTime(Now,3) < E Then
    If Table-1  = "AAAA" Then
    Table-1 = MsgBox("動作",0+48)
    End If
    End If
    End If


    2015年10月8日 上午 04:05
  • 您好,

    因為 FormatDateTime(Now,3) 只會取出 時間。

    如果是要比較日期,直接將S及E轉成日期來比較就可以了,如下,

    msgbox FormatDateTime(Now,3)
     
    S = "2015/10/07 10:10:00"
    E = "2015/10/08 13:20:00"
    msgbox Now > CDate(S)
    msgbox Now < CDate(E)
    If Now > CDate(S) And Now < CDate(E) Then
    msgbox "between " & S & ":" & E 
    End If
     

    VBScript您可以參考以下的link

    http://www.w3school.com.cn/vbscript/func_cdate.asp

    我是將上面的程式,存成 test.vbs ,然後直接執行,就可以測試了。


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/


    • 已編輯 亂馬客 2015年10月8日 上午 05:21
    • 已標示為解答 Marco Dai 2015年10月8日 下午 11:21
    2015年10月8日 上午 05:21
  • 這個問題已獲得解答,感謝Peter、tihs、版主、亂馬客的幫忙。
    2015年10月8日 下午 11:25

    • 已編輯 Marco Dai 2015年10月9日 上午 02:55
    2015年10月9日 上午 12:03