VB6.0での時間範囲取得についての質問です。

「毎週○曜日の×時×分になったらフラグを立てたい(ある処理をさせたい)」と思っています。
DateTime関数やDateDiff関数をいろいろいじってみたのですが、うまい方法を思いつきません。
曜日の取得はわかります。
(思いついたごり押しな方法としては現在日付(文字列)と設定時刻(文字列)をいじって今日の設定時刻(文字列)を作ってDateDiffにかませて比較するなど)

なにか単純明快な実装方法がありましたら教えてください。

回答の条件
  • 1人2回まで
  • 登録:2007/04/12 16:04:46
  • 終了:2007/04/12 21:45:13

ベストアンサー

id:taknt No.1

きゃづみぃ回答回数13539ベストアンサー獲得回数11982007/04/12 16:24:23

ポイント45pt

タイマーイベントで 1秒単位ぐらいで チェックして

その割り込み内で 今日の日付から 曜日を取得し

曜日が違う場合は、そのまま イベントを 抜けます。

そして 時間だけを 取り出して時間が一致するか 判断し

一致したら 分が 一致するか判断します。

それで一致したら フラグをたてればいいでしょう。


http://www.ivystar.jp/archives/category/access/accessoo/

時間を表示します。1桁の時間の場合は1桁で表示。2桁の場合は2桁で表示します。

例) Format(”6時8分15秒”, “h”) → 6

時間を取り出します。

id:k1LoW

回答ありがとうございます。

実装したところうまくいきました。

ところで"Timerを1秒ごと"というのはメモリ占有の原因になりそうなのですが、特に問題ないか調べてみようと思います。

2007/04/12 17:50:44

その他の回答(1件)

id:taknt No.1

きゃづみぃ回答回数13539ベストアンサー獲得回数11982007/04/12 16:24:23ここでベストアンサー

ポイント45pt

タイマーイベントで 1秒単位ぐらいで チェックして

その割り込み内で 今日の日付から 曜日を取得し

曜日が違う場合は、そのまま イベントを 抜けます。

そして 時間だけを 取り出して時間が一致するか 判断し

一致したら 分が 一致するか判断します。

それで一致したら フラグをたてればいいでしょう。


http://www.ivystar.jp/archives/category/access/accessoo/

時間を表示します。1桁の時間の場合は1桁で表示。2桁の場合は2桁で表示します。

例) Format(”6時8分15秒”, “h”) → 6

時間を取り出します。

id:k1LoW

回答ありがとうございます。

実装したところうまくいきました。

ところで"Timerを1秒ごと"というのはメモリ占有の原因になりそうなのですが、特に問題ないか調べてみようと思います。

2007/04/12 17:50:44
id:llusall No.2

llusall回答回数505ベストアンサー獲得回数612007/04/12 17:44:01

ポイント45pt
Option Explicit

Sub test()

    Dim xDay As Date        '設定日時
    Dim genZai As Date      '現在日時
    
    '現在日時をセット
    genZai = Now
    '設定日時をセット
    xDay = DateSerial(2007, 4, 12) + TimeSerial(17, 42, 21)
    
    '比較してみる
    If genZai = xDay Then
        MsgBox "まさにぴったり"
    ElseIf genZai < xDay Then
        MsgBox "まだまだ早いよ"
    Else
        MsgBox "過ぎちゃったよ"
    End If

End Sub

日時の比較方法を問われていますか?

id:k1LoW

回答ありがとうございます。

自分がしたいことは、日付の指定をせずに

毎週○曜日の何時何分を指定したいということなのです。

○曜日を取得して、そのあと今の時刻と、指定時刻の比較がしたいと思っています。

llusallさんの提示した方法だと、

DateSerialで今日の日付を指定、TimeSerialで指定時刻を指定すれば、今日の指定時刻の指定ができそうです。

しかしやはり1秒ごとのTimerが必要そうですね。

2007/04/12 17:57:02
  • id:k1LoW
    追記です。
    "毎週○曜日の何時何分"という指定時刻ですが、"毎週○曜日の何時何分から何時何分まで"という形でも、自分のやりたいことができます。
    以上を踏まえた上で
    引き続き回答をよろしくお願いします。
  • id:llusall
    指定の日時や、定期的な間隔などで処理を行いたいというのであれば、
    [コントロールパネル]-[タスク]から、exeファイルなどを登録しておけば可能かと思いますが、自アプリで日時を監視したいということでしょうか?
    それだと、takntさんの言うようにタイマーで監視することになりそうですね。
  • id:taknt
    タイマーイベントは 割り込みが発生するだけなので
    メモリは消費しません。
  • id:llusall
    Win32APIを忘れていました。
    Win32APIを使ってもタイマイベントを実装できるそうですよ。


    Windows API 関数を使用しているタイマ イベントを作成する方法
    http://support.microsoft.com/kb/180736/ja
    Visual Basic タイマ コントロールで許可されるより、長い間隔でイベントを実行する必要がある場合、これらの関数が使用できます。
  • id:k1LoW
    お二方、回答どうもありがとうございました。
    takntさんとllusallさんのアドバイスにより、Timerでの監視を行うことが最良であることがわかりました。
    また、無事実装が完了しました。

    問題が無事解決したので回答を締め切らせていただきます。

    どうもありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません