C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: c#で時間でプログラムの動作を変えるには


(過去ログ 102 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■60808 / inTopicNo.1)  c#で時間でプログラムの動作を変えるには
  
□投稿者/ TU (1回)-(2011/07/19(Tue) 22:02:57)

分類:[C#] 

VBのプログラムをC#で動作するプログラムを教えてください。

Dim Nday as date

Nday=date

if left(Nday,2)="11" or left(Nday,2) ="22" then


if time >"11:45:00" and fr=0 then
fr=1
処理1
   end if


   if time>"15:30:00" and fr=1 then
        fr=2
処理2
   end if

else

   fr=0

end if

以上です

処理内容は11日もくは22日で
11時45分に一回の処理、15時30分に一回処理をするプログラムです。
よろしくお願いいたします。
引用返信 編集キー/
■60810 / inTopicNo.2)  Re[1]: c#で時間でプログラムの動作を変えるには
□投稿者/ 魔界の仮面弁士 (2262回)-(2011/07/19(Tue) 22:26:23)
2011/07/19(Tue) 22:47:44 編集(投稿者)

No60808 (TU さん) に返信
> VBのプログラムをC#で動作するプログラムを教えてください。
(案1) VB で DLL を作り、それを C# で動かす。
(案2) VB の EXE を、C# から Process.Start 等で呼び出す。
(案3) VB のプログラム内容を C# に自前で翻訳して作り直す。


> 処理内容は11日もくは22日で
> 11時45分に一回の処理、15時30分に一回処理をするプログラムです。
そもそもの VB コードは、そのような仕様になっていないようですが…。

それと、そういった内容であれば、あえて作りこまずとも、
タスクマネージャに登録するという選択肢も使えるかもしれません。



> よろしくお願いいたします。
現在時刻は、
 DateTime nday = DateTime.Now;
で得られます。「nday」という部分が変数名です。

C# のプリミティブ型には日付型がありませんので、かわりに
.NET Framework の DateTime 構造体で日付を表します。

そこから nday.Day とすれば、日を1〜31な整数として得られますし、
nday.ToString("HHmm") とすれば、時と分を表す4桁の文字列を得られます。

なお、文字列の大小比較機能は C# にありませんので、String.Compare を使うか、
もしくは int.Convert などで 数字を数値に変換してから比較してみてください。
引用返信 編集キー/
■60811 / inTopicNo.3)  Re[1]: c#で時間でプログラムの動作を変えるには
□投稿者/ 逆運の覇者 (39回)-(2011/07/19(Tue) 22:43:31)
>VBのプログラムをC#で動作するプログラムを教えてください。
言いたいことはわかりますが、それでもちゃんと書いてください。


            DateTime Nday = DateTime.Now;
            TimeSpan ts;

            if ((Nday.Day == 11) || (Nday.Day == 22))
            {
                ts = DateTime.Parse(Nday.ToString("yyyy/MM/dd 11:45:00")) - Nday;
                if ((ts.TotalSeconds < 0)  && (fr == 0))
                {
                    fr = 1;
                }

                ts = DateTime.Parse(Nday.ToString("yyyy/MM/dd 15:30:00")) - Nday;
                if ((ts.TotalSeconds < 0) && (fr == 1))
                {
                    fr = 2;
                }
            }
            else fr = 0;

引用返信 編集キー/
■60814 / inTopicNo.4)  Re[1]: c#で時間でプログラムの動作を変えるには
□投稿者/ 魔界の仮面弁士 (2263回)-(2011/07/19(Tue) 22:53:52)
2011/07/19(Tue) 23:09:16 編集(投稿者)
No60808 (TU さん) に返信
> Nday=date
> if left(Nday,2)="11" or left(Nday,2) ="22" then
何故ここで Left 関数がでてきたのでしょう?
もしかして、地域設定を dd/MM/yyyy にしているのでしょうか。


>       if time >"11:45:00" and fr=0 then
>               fr=1
>              処理1
>    end if
>    if time>"15:30:00" and fr=1 then
>         fr=2
>              処理2
>    end if
> else 
>    fr=0
> end if 

11:45:00 には起動せず、11:45:01 なら起動するという仕様で良いのでしょうか。


> 処理内容は11日もくは22日で
> 11時45分に一回の処理、15時30分に一回処理をするプログラムです。

たとえば「11日の15時35分」から計測開始した場合、この処理で
どのようにふるまうべきでしょうか?

 (1) 既に 15時30分代ではないので、処理1も処理2も実行されない。
  次に処理が行われるには、22 日まで待つ必要がある。

 (2) 15時30分を過ぎたので、処理2のみ実行される。
  処理1については、11日分がスキップされ、22日に実行される。

 (3) 11時45分も15時30分も過ぎているため、まずは処理1を実行し、
  さらに続けて、処理2も実行する。その後、22 日までは何も起きない。

 (4) 11時45分も15時30分も過ぎているため、まずは処理1のみを実行する。
  次回呼び出し時に、今度は処理2を実行する。その後は、22 日まで何も起きない。

引用返信 編集キー/
■60822 / inTopicNo.5)  Re[2]: c#で時間でプログラムの動作を変えるには
□投稿者/ TU (2回)-(2011/07/20(Wed) 13:30:41)
No60814 (魔界の仮面弁士 さん) に返信
> 2011/07/19(Tue) 23:09:16 編集(投稿者)
>
> ■No60808 (TU さん) に返信


>>if left(Nday,2)="11" or left(Nday,2) ="22" then
> 何故ここで Left 関数がでてきたのでしょう?
> もしかして、地域設定を dd/MM/yyyy にしているのでしょうか。


すみません。これはrightです。日付を取得したいと思っています。



>
>
>> if time >"11:45:00" and fr=0 then
>> fr=1
>> 処理1
>>   end if
>>   if time>"15:30:00" and fr=1 then
>>        fr=2
>> 処理2



> 11:45:00 には起動せず、11:45:01 なら起動するという仕様で良いのでしょうか。

シビアではないので秒は無視して分の部分以降を参照します。


>

> たとえば「11日の15時35分」から計測開始した場合、この処理で
> どのようにふるまうべきでしょうか?
>
>  (1) 既に 15時30分代ではないので、処理1も処理2も実行されない。
>   次に処理が行われるには、22 日まで待つ必要がある。
>


1番です。11時45分を経過してしまったものは以後の処理せず次の機会(日付)を待ちます。

全体的に不備が多くて申し訳ありません。

引用返信 編集キー/
■60828 / inTopicNo.6)  Re[3]: c#で時間でプログラムの動作を変えるには
□投稿者/ 魔界の仮面弁士 (2264回)-(2011/07/20(Wed) 14:43:36)
No60822 (TU さん) に返信
> すみません。これはrightです。日付を取得したいと思っています。
日を知りたいなら、VB ならば Day 関数か DatePart 関数で取得しましょう。(もしくは Format で書式化)
Right 関数では、OS の地域設定によっては正しく取得できない可能性があります。


>> 11:45:00 には起動せず、11:45:01 なら起動するという仕様で良いのでしょうか。
> シビアではないので秒は無視して分の部分以降を参照します。
イメージ的には「11:45:00.000〜11:45:59.999」の期間が対象となるのという事ですね。
猶予はそれぞれ 1 分間だけであり、11時46分になってしまえば起動されない、と。


>> たとえば「11日の15時35分」から計測開始した場合
> 1番です。11時45分を経過してしまったものは以後の処理せず次の機会(日付)を待ちます。

現在のコードだと、11時45分を経過する前、たとえば14時から計測を開始した場合、
fr は 0 のままなので、15時30分になっても処理2は実行されないことになりますのが、
それで良いのですね?
引用返信 編集キー/
■60839 / inTopicNo.7)  Re[4]: c#で時間でプログラムの動作を変えるには
□投稿者/ TU (3回)-(2011/07/20(Wed) 19:51:37)
No60828 (魔界の仮面弁士 さん) に返信

> 日を知りたいなら、VB ならば Day 関数か DatePart 関数で取得しましょう。(もしくは Format で書式化)
> Right 関数では、OS の地域設定によっては正しく取得できない可能性があります。

DatePart? format ?もう少し調べます。


>
> 猶予はそれぞれ 1 分間だけであり、11時46分になってしまえば起動されない、と。

そのとおりです。

> 現在のコードだと、11時45分を経過する前、たとえば14時から計測を開始した場合、
> fr は 0 のままなので、15時30分になっても処理2は実行されないことになりますのが、
> それで良いのですね?

それで良いです。イメージは最初の処理がファイルOpen。次の処理2がファイルCloseの予定です。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -